如何停止 SWT 应用程序中的自定义 Thead?
How do I stop a custom Thead in SWT application?
如何在退出 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 应用程序 window,但线程保持 运行(它仍然创建调试输出)。 dispose()
方法不是自动调用的吗?如果用户关闭应用程序,使线程停止的最佳方法是什么 window?
您必须自己 dispose()
您的小部件。我不知道你是如何摆脱你的小部件的,因为该片段不包含任何代码。
扩展Widget
的每个class都允许注册DisposeListener
(使用addDisposeListener()
方法)。一旦处理了小部件,您就会收到通知。
顺便说一句。你可能有错字,你的 if
检查 this.checker
是否不为空并且你的线程字段被命名为 myThread
所有控件在它们的父级 window 关闭时被释放,但 不是 通过调用它们的 dispose
方法(内部方法称为 release
叫做)。因此,正如另一个答案中提到的,您需要使用 DisposeListener
来了解处置情况。
或者您的线程可以调用 setDaemon(true)
- JVM 在关闭应用程序时不等待守护线程停止。
如何在退出 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 应用程序 window,但线程保持 运行(它仍然创建调试输出)。 dispose()
方法不是自动调用的吗?如果用户关闭应用程序,使线程停止的最佳方法是什么 window?
您必须自己 dispose()
您的小部件。我不知道你是如何摆脱你的小部件的,因为该片段不包含任何代码。
扩展Widget
的每个class都允许注册DisposeListener
(使用addDisposeListener()
方法)。一旦处理了小部件,您就会收到通知。
顺便说一句。你可能有错字,你的 if
检查 this.checker
是否不为空并且你的线程字段被命名为 myThread
所有控件在它们的父级 window 关闭时被释放,但 不是 通过调用它们的 dispose
方法(内部方法称为 release
叫做)。因此,正如另一个答案中提到的,您需要使用 DisposeListener
来了解处置情况。
或者您的线程可以调用 setDaemon(true)
- JVM 在关闭应用程序时不等待守护线程停止。