3
此代碼包含可移動的pacman,按下空格按鈕後拍攝小橢圓。所以布爾變量默認爲false。按空格按鈕後變爲true,並繪製橢圓。按空格按鈕之後,線程啓動。這個線程包含代碼向前移動橢圓形,並且一旦它達到某些協調它消失。因此,當我第一次按空格時,一切工作正常。事實上,它也工作正常後,但更多的時間,但繼續拋出IllegalThreadStateException.I決定把線程代碼放到while(c!=22)
塊中,因爲當c = 21時球消失了,所以我認爲線程會因爲條件無法滿載而繼續運行。所以我的意思是每次按下空格按鈕時都會讓橢圓運動。 這不是完整的代碼。很重要的一部分。如果您需要完整的代碼,請讓我知道。 謝謝!重複啓動線程
主題:
thread=new Thread(){
public void run(){
while(c!=22){
try{
for (c=0;c<=20;c++){
newX=newX+c;
repaint=true;
Thread.sleep(100);
}
if(c==21){
shoot=false;
c=0;
}
}catch(InterruptedException v){System.out.println(v);}
}
}
};
的paintComponent方法:
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)
newX=x+20;
newY=y+10;
if(shoot){
g.drawOval(newX,newY,10,10);
}
if(repaint)
repaint();
}
關鍵事件,啓動線程:
if(e.getKeyCode()==KeyEvent.VK_SPACE){
shoot=true;
thread.start();
}
1)爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 2)'i = new ImageIcon(「C:\\ Users \\ Jakub \\ Desktop \\ pm.gif」);'不要試圖在繪製方法中加載資源。相反,將它們聲明爲類屬性,並在需要時簡單地繪製它們。 –