在我做游戏当中,启用了一个线程来做定时器,在每隔一段时间内刷新一次屏幕
但是现在想用按钮让线程wait下来,在点击按钮继续游戏 为什么我调用wait的时候总是出现这个异常
希望大家多多指点一下  在这里先谢谢各位了!
异常Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)

解决方案 »

  1.   

    第一个线程还未结束然后又执行了start方法start的时候就异常了
      

  2.   

    总之,一个线程只能调用start方法一次,lz肯定是在哪个地方又调用了一次才引发了这个异常
      

  3.   

    void run() {
       while(isStop) {
        //do some thing
     //sleep
    }
    }直接控制isStop变量
      

  4.   

    楼主,wait方法,是Thread类的方法吗 ?  wait方法,是Object的方法吧?楼主的编程思想有些问题,你是要线程中止,但是,调用wait方法,不靠谱。
    如果想暂停某个线程的工作,有个不建议的方案,就是将线程挂起。(比楼主的方案靠谱些)我认为最好的方法,是从程序上,温柔的控制代码走向。
    比如:
    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中编写、测试,仅供楼主参考,能看懂思路就可以了。
      

  5.   

    哦。犯了一个很2的问题。
    上述的instance.wait()方法,换成,instance.join()方法。