0

所以我一直在尝试做一些简单的编码:用 WASD 键移动一个蓝色方块,

public static void main (String args[])
{
    new MoveWASD();
}

public MoveWASD() 
{
    super("Use-WASD-to-Move");
    setSize(800, 450);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);        
}

public void paint(Graphics g)
{
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, 800, 450);

    g.setColor(Color.BLUE);
    g.fillRect(Location[0], Location[1], 20, 20);
    System.out.println("PRINTEDs");
}

public class MoveDetection extends Thread implements KeyListener
{




    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub

    }


    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }



    public void keyPressed(KeyEvent arg0) 
    {


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


                if(event.getKeyChar() == 'w')
                {
                    Location[1] = Location[1] - 20;
                    Repeat = true;
                }
                else if(event.getKeyChar() == 'd')
                {
                    Location[0] = Location[0] + 20;
                }
                else if(event.getKeyChar() == 's')
                {
                    Location[1] = Location[1] + 20;
                }
                else if (event.getKeyChar() == 'a')
                {
                Location[0] = Location[0] - 20;
                }
                else
                {
                Location[0] = Location[0];
                }

                Thread.sleep(75);
            }
            catch(Exception e) 
            {
                break;
            }
            }

        }

    }


}

但是,将静态空洞放入另一个时会出错,箭头(上方)指向我的两个错误:一个运行不足,表示:令牌“void”上的语法错误,@预期和另一个在结束括号下在 run( )中显示:语法错误,插入“EnumBody”以完成 BlockStatements 另外,当我在 movedetection 类下的任何“void”下放置“System.out.write()”时,它不会显示,这可能意味着它是'没有得到它......因为我刚刚开始编码,我不知道这意味着什么,有什么帮助吗?

4

2 回答 2

1

在 Java 中,您不能将方法嵌套在其他方法中,也许可以阅读这个.

您需要从其他方法调用该方法

public void run(KeyEvent event) {
    //do stuff
}
public void keyPressed(KeyEvent event)  {
    run(event);
}

也许更重要的是你有while(true)一个事件处理程序。这将导致 EDT 被阻塞,从而导致 GUI 冻结。

我看不出while循环的任何原因。每次按键都会触发按键事件。

于 2013-09-28T13:01:01.817 回答
0

您已经在方法中声明了一个方法:

public void keyPressed(KeyEvent arg0) {
    public void run() {
        while(true) {
            ...

你不能那样做。尝试删除public void run()

public void keyPressed(KeyEvent arg0) {
    while(true) {
            ...

或者,如果您正在尝试启动一个线程(我怀疑您是):

public void keyPressed(KeyEvent arg0) {
    new Thread(new Runnable() {
        public void run() {
            while(true) {
                ...
            }
        }
    }).start();
}
于 2013-09-28T13:02:52.830 回答