Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFrame背景在启动后消失_Java_Swing_Jframe_Paint - Fatal编程技术网

Java JFrame背景在启动后消失

Java JFrame背景在启动后消失,java,swing,jframe,paint,Java,Swing,Jframe,Paint,所以我不确定我设置Jframe背景的问题在哪里 frame.getContentPane().setBackground(Color.green); 但是,一旦程序启动,它就会显示一道绿色的闪光,然后它就消失了 Game.java package com.questkings.game; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java

所以我不确定我设置Jframe背景的问题在哪里

frame.getContentPane().setBackground(Color.green);
但是,一旦程序启动,它就会显示一道绿色的闪光,然后它就消失了

Game.java

package com.questkings.game;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.Timer;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Game extends JPanel{

Player player = new Player(this);

public Game(){
    addKeyListener(new KeyListener(){

        @Override
        public void keyTyped(KeyEvent e){
        }

        @Override
        public void keyReleased(KeyEvent e){
            player.keyReleased(e);
        }

        @Override
        public void keyPressed(KeyEvent e){
            player.keyPressed(e);
        }
    });
    setFocusable(true);
}

public void move(){
    player.move();
}

@Override
public void paint(Graphics g){
    super.paint(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);

    player.paint(g2d);
}

public void timer1() throws InterruptedException{
     int delay = 1000; //milliseconds
      ActionListener taskPerformer = new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
          }
      };
      new Timer(delay, taskPerformer).start();;

Thread.sleep(10);
}

public static void main(String args[]) throws InterruptedException, Exception{
    int Width = 800;
    int Height = 400;
    Game game = new Game();

    JFrame frame = new JFrame("quest Kings");
    frame.setSize(Width, Height);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setBackground(Color.green);
    frame.add(game);
    frame.setResizable(false);


    //What to do after the program starts
    while(true){
        game.move();
        game.repaint();
        game.timer1();
    }
}
}
您的whiletrue{…}循环阻塞主线程,这就是为什么会发生这种情况。尝试使用worker在单独的线程中执行此类操作

此链接可能会有所帮助:


我会给你一个建议,直接从内容窗格设置应用程序的颜色,就像这样

contentPane.setBackground(Color.red);

1为了更快地获得更好的帮助,请发布一个最简单、完整、可验证的示例或简短、独立、正确的示例。2.10;为什么代码中会出现这种情况?而实际{..}不会阻止EDT事件调度线程。发生这种情况时,GUI将“冻结”。有关详细信息和修复方法,请参阅。@andreThompson whiletrue不应阻止EDT,因为它在主线程中调用。如果我只是在后台为我的维度编写了一个新矩形,那么它的缺点是什么?您知道whiletrue循环正在创建大量的摆动计时器实例而whiletrue在主线程中调用,为什么它要阻止EDT?