请帮我解决我的问题。我有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;
}
}
}
}
编辑:确定我改变了一些东西,它现在正在工作,但是:如果我点击停止它会立即停止。
答案 0 :(得分:1)
首先,你正在打断错误的线程(应该是td)。其次,您省略的try
子句的内容实际上很重要(某些操作是不可中断的)。最后,Thread.isInterrupted
可能不是您想要使用的,因为该标志可能会被某些不相关的代码清除。根据您正在中断的内容,可能(或可能不)只是捕获InterruptedException
是一个好主意,并在它被抛出时终止。更好的方法是添加自己的标志,线程将检查而不是isInterrupted
,并且事件处理程序将设置而不是(或除了)中断工作线程。