Java Netbeans中的灰色屏幕

Java Netbeans中的灰色屏幕,java,swing,jframe,keylistener,paintcomponent,Java,Swing,Jframe,Keylistener,Paintcomponent,所以我开始使用netbeans,开始编写游戏。。。到目前为止,我没有出错,但是当我运行它时,它只是一个灰色的框,标题是“zachs游戏出现了,就这样…”如果你知道问题1,请帮助-谢谢 package swing9; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; impo

所以我开始使用netbeans,开始编写游戏。。。到目前为止,我没有出错,但是当我运行它时,它只是一个灰色的框,标题是“zachs游戏出现了,就这样…”如果你知道问题1,请帮助-谢谢

package swing9;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;

public class JavaApplication2 extends JFrame implements Runnable {

    int x, y, xDirection, yDirection;
    Font font = new Font("Arial", Font.BOLD | Font.ITALIC, 30);

    public void run() {
        try {
            while (true) {

                move();

                Thread.sleep(5);
            }
        } catch (Exception e) {

            System.out.println("Error");
        }
    }

    public void move() {

        x += xDirection;
        y += yDirection;

        if (x <= 0)
            x = 0;

        if (x >= 300)
            x = 300;

        if (y <= 50)
            y = 50;

        if (y <= 300)
            y = 300;

    }

    public void seyXDir(int xdir) {

        xDirection = xdir;
    }

    public void setYDirection(int ydir) {

        yDirection = ydir;
    }

    public class AL extends KeyAdapter {

        public void keyPressed(KeyEvent e) {

            int keyCode = e.getKeyCode();

            if (keyCode == e.VK_LEFT) {

                int setXDirection = -1;

            }

            if (keyCode == e.VK_RIGHT) {
                int setXDirection = +1;

            }

            if (keyCode == e.VK_UP) {
                int setYDirection = -1;
            }

            if (keyCode == e.VK_DOWN) {
                int setYDirection = +1;

            }

        }

    }

    public void keyReleased(KeyEvent e) {

        int keyCode = e.getKeyCode();

        if (keyCode == e.VK_LEFT) {
            int setXDirection = 0;
        }

        if (keyCode == e.VK_RIGHT) {
            int setXDirecetion = 0;
        }

        if (keyCode == e.VK_UP) {
           int setYDirectiom = 0;
        }

        if (keyCode == e.VK_DOWN) {
            int setYDirecction = 0;
        }

    }

    public JavaApplication2() {

        addKeyListener((KeyListener) new JavaApplication2.AL());

        setTitle("Zachs Game");
        setSize(300, 300);

        setResizable(false);

        setVisible(true);
        setBackground(Color.blue);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        x = 150;
        y = 150;

    }

    public void paintComponent(Graphics g) {

        g.setColor(Color.red);
        g.drawString("Play", 40, 40);
        g.setFont(font);
        g.setColor(Color.red);
        g.fillOval(x, y, 15, 15);

        repaint();
    }

    public static void main(String[] args) {

        new JavaApplication2();

        // threads

        Thread t1 = new Thread();
        t1.start();
    }
}
package swing9;
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.awt.event.KeyAdapter;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入javax.swing.JFrame;
公共类JavaApplication2扩展JFrame实现可运行{
int x,y,xD方向,yD方向;
Font Font=新字体(“Arial”,Font.BOLD | Font.ITALIC,30);
公开募捐{
试一试{
while(true){
move();
睡眠(5);
}
}捕获(例外e){
System.out.println(“错误”);
}
}
公开作废动议(){
x+=xD方向;
y+=y方向;
如果(x=300)
x=300;

如果(y
JFrame
或其任何超类未实现
paintComponent
方法,则永远不会调用该方法。请通过添加
@Override
注释自行检查

将此方法移动到扩展
JComponent
的新类,并调用
super.paintComponent(g)
作为第一条语句

不要从
paintComponent
中调用
repaint
,这会创建无限循环并降低性能。这些组件设计为更容易与swing组件交互。使用这些线程进行定期更新


旁白:
JFrame
默认情况下不可聚焦,因此需要聚焦的
KeyEvents
在不使窗口可聚焦的情况下不会被触发。请改用。

(并且不要在任何
paint
方法中调用repaint,当模型发生更改时,实际上没有任何东西请求重新绘制…)
应该是
AL
类的一部分吗?我经常发现
@Override
标记对于查找这样的小错误非常方便。
线程。睡眠(5)
足够接近
线程。睡眠(0)
没有区别。60fps大致是
线程。睡眠(15)
,25fps大致是
线程。睡眠(40)在大多数监视器上,大多数人在30fPS上看不到太大的差异……你的<代码>密钥监听器< /代码>不太可能发生火灾,因为<代码> jFrase>代码>本身不能接收焦点,因为上面有其他组件,请考虑使用它。