我建了两个线程来执行,通过一个按钮来启动两个线程,执行完一次后再次执行的时候出现以下错误:
java.lang.illegal thread state exception
我已经在run方法里的最后位置写上了return来释放这两个线程,为什么还会出现这个错误呢?

解决方案 »

  1.   

    对于同一个线程,只能调用一次start,第二次调用start就会抛异常。
      

  2.   

    把代码贴了看看啊,呵呵。
    如果不确定线程是否中断,可以用isInterrupted()方法先判断一下,看看true还是false
      

  3.   

    调用要检测线程的isAlive()  boolean isAlive() 
              Tests if this thread is alive. 
              
      

  4.   

    代码来了!!!
    //按钮事件对应的接口方法:
    actionPerformed(ActionEvent e){
    if (e.getSource() == submit) {
    System.out.println("t1 is isInterrupted:"+t1.isInterrupted());//第二次点按钮返回false
    System.out.println("t2 is isInterrupted:"+t2.isInterrupted());//第二次点按钮返回false System.out.println("t1 is Alive:"+t1.isAlive());//第二次点按钮返回false System.out.println("t2 is Alive:"+t2.isAlive());//第二次点按钮返回false t1.start();
    t2.start();
    }
    }
    public void run() {
    //t1线程:改变一个标签的图标
    if(Thread.currentThread()==t1) {

    bar.setIcon(bar_pic1);
    }
                                    //t2线程:设置按钮的激活属性,再次改变标签的图标,输入输出流操作
    if(Thread.currentThread()==t2) {
    submit.setEnabled(false);
    FileSafeFactory fsf = new FileSafeFactory(oFPath.getText());
    if(!fsf.isExistKey())
    fsf.makeKey();
    Boolean sucuss = fsf.locker("en",oFPath.getText(),
    eFPath.getText());
    bar.setIcon(bar_pic2);
    submit.setEnabled(true);
    return;
    }

    提取了LS各位的意见,不过问题依旧
      

  5.   

    问题解决了,我把new线程的语句放到actionPerformed()里面去了之后就没出现问题了,我想原因可能是我只是在窗体的构造方法里new过一次线程,第一次点按钮后就把他们给干掉了,所以后面再调用它们就会出错。我想更好的方法是在第一次使用后就把它们挂起而不是干掉。