Java Swing:如果主窗口关闭,如何杀死工作线程?

Java Swing:如果主窗口关闭,如何杀死工作线程?,java,swing,concurrency,Java,Swing,Concurrency,所以我有一个swing应用程序,当按下一个按钮时,将启动一个工作线程。如果主窗口关闭,JVM仍在运行,工作线程将不间断地无限期地运行。我希望工作线程在窗口关闭时死亡。JVM在所有非守护进程线程死亡时退出。您的工作线程不是守护进程,因此不允许JVM退出。让工人: 另一种方法是在关闭主窗口时终止线程,但这需要处理和中断异常如果希望在关闭窗口时终止整个应用程序,可以使用以下方法: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 如果您只想停

所以我有一个swing应用程序,当按下一个按钮时,将启动一个工作线程。如果主窗口关闭,JVM仍在运行,工作线程将不间断地无限期地运行。我希望工作线程在窗口关闭时死亡。

JVM在所有非守护进程线程死亡时退出。您的工作线程不是守护进程,因此不允许JVM退出。让工人:


另一种方法是在关闭主窗口时终止线程,但这需要处理和
中断异常

如果希望在关闭窗口时终止整个应用程序,可以使用以下方法:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

如果您只想停止工作线程,也许还想做其他事情。您可以在框架上注册WindowListener,在onWindowClosing回调中,您可以检查事件类型并执行任何您想执行的操作。

您尝试过吗?我不确定这是否有效。正如Tomasz所指出的,JVM将在所有非守护进程线程死亡时退出。这将简单地作为JVM在所有线程完成后退出
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);