java - 如何在 SWT 应用程序中停止自定义 Thead?

标签 java multithreading swt dispose

退出 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() 方法不是自动调用的吗?如果用户关闭应用程序窗口,使线程停止的最佳方法是什么?

最佳答案

所有控件在其父窗口关闭时都会被释放,但不是通过调用它们的 dispose 方法(调用名为 release 的内部方法)。因此,正如另一个答案中提到的,您需要使用 DisposeListener 来了解处置情况。

或者,您的线程可以调用 setDaemon(true) - 关闭应用程序时,JVM 不会等待守护线程停止。

关于java - 如何在 SWT 应用程序中停止自定义 Thead?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28481282/

相关文章:

java - 当 null 从未返回时,端点方法怎么可能返回 null?

java - SCJP:未捕获异常后程序未终止

java.lang.UnsatisfiedLinkError : Cannot load 64-bit SWT libraries on 32-bit JVM in Windows x86 machine 错误

java - 如何以编程方式从颜色名称获取 R-G-B 值

java - 从 Adob​​e AIR 的 native 进程运行 Java 程序

java - 使用 jSTL 在 JSP 中预填充下拉列表

java - 我如何实际使用分隔符?

c++ - 如何从另一个线程获取指针?

python - Python 中可变数据的重复数据删除/合并

java - 如何从插件内部资源中获取图像?