线程中断有时有效有时无效
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
,并且事件处理程序将设置而不是(或除此之外)中断工作线程。
请帮我解决我的问题。我有 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
,并且事件处理程序将设置而不是(或除此之外)中断工作线程。