在我做游戏当中,启用了一个线程来做定时器,在每隔一段时间内刷新一次屏幕
但是现在想用按钮让线程wait下来,在点击按钮继续游戏 为什么我调用wait的时候总是出现这个异常
希望大家多多指点一下 在这里先谢谢各位了!
异常Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
但是现在想用按钮让线程wait下来,在点击按钮继续游戏 为什么我调用wait的时候总是出现这个异常
希望大家多多指点一下 在这里先谢谢各位了!
异常Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
while(isStop) {
//do some thing
//sleep
}
}直接控制isStop变量
如果想暂停某个线程的工作,有个不建议的方案,就是将线程挂起。(比楼主的方案靠谱些)我认为最好的方法,是从程序上,温柔的控制代码走向。
比如:
public class FreshTimer implements Runnable{
private volatile boolean pausing = false;
private volatile boolean running = true;
private volatile long delay = 5000L;
private Thread instance = new Thread(this);
public void run(){
while(running){
if(pausing){
try{Thread.sleep(1);}catch(Exception e){}
}else{
try{doFresh();}catch(Exception e){e.printStackTrace();}
try{Thread.sleep(delay);{catch(Exception e){}
}
}
}
protected void doFresh(){
//TODO 添加刷新方法。该方法中如果包含Thread.sleep()方法,可能会引起bug。
}
public void doPause(){
if(pausing)return;
pausing=true;
}
public void undoPause(){
if(pausing){pausing = false;}
}
public void start(){
if(running)return;
running = true;
instance.start();
}
public void stop(){
if(running){
running = false;
instance.interrupt();
instance.wait();//编写这句,是为了帮助楼主理解wait方法,如果程序没有很强的时效性,
//此处可以不写这句。
}
}
//TODO 其他楼主需要添加的方法。
}以上代码未在IDE中编写、测试,仅供楼主参考,能看懂思路就可以了。
上述的instance.wait()方法,换成,instance.join()方法。