线程中断有时有效有时无效

Thread Interrupted sometimes works and sometimes not

请帮我解决我的问题。我有 2 个 JMenuItems,如果我单击“开始”,它将开始并执行操作。如果我点击停止它就会停止 :) 单击“开始”后,单击“停止”,有时会停止,有时不会。但我希望它总是停止。

我做错了什么? :/

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

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

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