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 を別の void に配置するとエラーが発生します。矢印 (上) は私の 2 つのエラーを指しています。 run( )には次のように書かれています: Syntax error, insert "EnumBody" to complete BlockStatements私はコーディングを始めたばかりなので、これが何を意味するのかわかりません。何か助けはありますか?

4

2 に答える 2

1

Java では、メソッドを他のメソッドにネストすることはできません。おそらくthisを読んでください。

メソッドを他のメソッドから呼び出す必要があります

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 に答える