2

これが私のコードの一部です。コード全体が必要な場合はお知らせください。したがって、私の問題は、この部分if(shoot) thread.start();が実際には機能しないことです。スペースキーを使用するとthread.start()、すべてが正常に機能しますが、プログラムの起動時にスレッドを開始したくありませんが、スペースボタンを押した後 (変数シュートが true になった後) 提案していただきありがとうございます!

public void paintComponent(Graphics g){
super.paintComponent(g);

i=new ImageIcon("C:\\Users\\Jakub\\Desktop\\pm.gif");
pacman=i.getImage();

g.drawImage(pacman,x,y,this);

if(shoot){
g.drawOval(newX+20,y+10,10,10);
}

if(repaint)
    repaint();
 }

public static void main(String args[]){
Buffer z= new Buffer();
z.setBackground(Color.cyan);

frame=new JFrame();
frame.setSize(500,500);
frame.add(z);
frame.addKeyListener(z);
frame.setVisible(true);

thread=new Thread(){
    public void run(){
        try{
        for (int i=0;i<=20;i++){
            newX=newX+i;
            repaint=true;
            Thread.sleep(100);                
            }
    }catch(InterruptedException v){System.out.println(v);}
    }
};
if(shoot)
    thread.start();
}
    if(e.getKeyCode()==KeyEvent.VK_SPACE){
    shoot=true;
}
4

2 に答える 2

3
    if(shoot)
        thread.start();
=>  }

アプリケーションを起動すると、新しい JFrame が作成され、サイズなどが設定され、Threadインスタンスが作成され、true か false かがチェックされるshootため、スレッドは開始されません。その後、上記の時点で JFrame が閉じられるのを待ちます。をクリックすると、アプリケーションはその時点でまだ待機しているため、が true か falseshootかはチェックされません。shoot

代わりにできることは、上記のコードを主要なリッスン メソッドに移動することです。shoot適切な場所に移動することも忘れないでください。

于 2013-07-20T13:12:42.823 に答える
2

キーが押されたときに変数を true にする代わりに、 keyPressed()メソッド自体の中でスレッドを開始するタスクを実行することができます。

于 2013-07-20T13:13:52.167 に答える