gpt4 book ai didi

java - 线程的可重复启动

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:27 25 4
gpt4 key购买 nike

此代码包含可移动的吃 bean 人,按下空格键后会发射小椭圆。因此 boolean 变量默认为 false。按下空格键后变为真,并绘制椭圆。按下空格键后,也会启动新线程。该线程包含向前移动椭圆形的代码,一旦它达到某些坐标,它就会消失。所以当我第一次按空格键时,一切正常。实际上它在多次后也工作正常,但 elclipse 不断抛出 IllegalThreadStateException。我决定把线程代码进入 while(c!=22) block ,因为当 c=21 时球消失了,所以我认为线程将继续运行,因为 while 条件无法满足。所以我的观点是使那个椭圆形每次我按空格键时移动。这不是完整的代码。只是重要的部分。如果您需要完整的代码,请告诉我。谢谢!!

主题:

        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();
}

最佳答案

IllegalThreadStateException 可能会被抛出,因为您为同一个线程对象多次调用了 Thread.start()。避免这种异常的关键是在每次启动之前实例化thread(具体的实现取决于你想要实现的行为)。

关于java - 线程的可重复启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17776099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com