线程中断有时是有效的,有时不是

时间:2015-01-02 00:20:31

标签: java multithreading interrupt

请帮我解决我的问题。我有2个JMenuItems,如果我点击Start它将开始并做一些事情。如果我点击停止它将停止:) 点击“开始”后,我点击“停止”,有时会停止,有时不会停止。但我希望它永远停止。

我做错了什么? :/

class DiashowListener implements ActionListener {
Thread td;
boolean ok = false;

        public void actionPerformed(ActionEvent e) {

            if (e.getActionCommand().equals("Start")) { 

                td = new Thread(new Runnable() {
                    public void run() {
                        if (bimg != null) {
                                while (!ok) {
                                    try {
                                        ...


                                     } catch (Exception e2) {
                                    }   
                                    frame.repaint();
                                }                       
                        } 
                    }
                });

                td.start();

            } else if (e.getActionCommand().equals("Stop")) {
                if (td != null){
                    ok = true;
                }
            }
        }
}

编辑:确定我改变了一些东西,它现在正在工作,但是:如果我点击停止它会立即停止。

1 个答案:

答案 0 :(得分:1)

首先,你正在打断错误的线程(应该是td)。其次,您省略的try子句的内容实际上很重要(某些操作是不可中断的)。最后,Thread.isInterrupted可能不是您想要使用的,因为该标志可能会被某些不相关的代码清除。根据您正在中断的内容,可能(或可能不)只是捕获InterruptedException是一个好主意,并在它被抛出时终止。更好的方法是添加自己的标志,线程将检查而不是isInterrupted,并且事件处理程序将设置而不是(或除了)中断工作线程。