退出SWT应用程序时,如何停止自定义线程?
MyThread
在无限循环中运行,直到某个条件成立为止:
class MyThread extends Thread {
@Override
public void run() {
do {
// Do stuff...
}
while (!this.isInterrupted() && otherCondition);
}
在我的SWT应用程序中,我确实启动了线程并尝试在SWT组合的dispose()
方法中停止。但是,永远不会调用此方法。
class MyComposite extends Composite {
private MyThread myThread = null;
@Override
public void dispose() {
super.dispose();
if (null != this.myThread) {
this.myThread.interrupt();
}
}
public void somewhere() {
this.myThread = new MyThread();
this.myThread.start();
}
}
现在,我可能已经关闭了我的SWT应用程序窗口,但是线程一直在运行(它仍然会创建调试输出)。是不是自动调用了dispose()
方法?如果用户关闭应用程序窗口,那么使线程停止的最佳方法是什么?
答案 0 :(得分:2)
所有控件在其父窗口关闭时处理,但不通过调用其dispose
方法(调用名为release
的内部方法)。因此,如另一个答案中所述,您需要使用DisposeListener
来了解处置。
或者你的线程可以调用setDaemon(true)
- 关闭应用程序时,JVM不会等待守护程序线程停止。
答案 1 :(得分:1)
你必须自己dispose()
你的小部件。我不知道你是如何摆脱你的小部件,因为该代码片段不包含任何代码。
扩展Widget
的每个类都允许注册DisposeListener
(使用addDisposeListener()
方法)。只要小部件处理完毕,您就会收到通知。
顺便说一下。如果if
不为空并且您的主题字段名为this.checker
myThread
检查可能是拼写错误