所以我有一个swing应用程序,一个按钮,当按下时,会启动一个worker线程。如果主窗口关闭,jvm仍然在运行,工作线程不间断地无限期地运行。我想在Windows关上的时候工人的线就死了。
wa7juj8i1#
如果要在窗口关闭时终止整个应用程序,可以使用以下方法:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
如果你只想停止工作线程,或者做其他事情。您可以在框架和onwindowclosing回调中注册一个windowlistener,您可以检查事件类型并执行任何您想要的操作。
sh7euo9m2#
当所有非守护进程线程死亡时,jvm退出。工作线程不是守护进程,因此不允许jvm退出。只需让工作线程成为守护进程:
workerThread.setDaemon(true);
另一种方法是 interrupt() 你的线程关闭主窗口时,但这需要处理 isInterrupted() 以及 InterruptedException .
interrupt()
isInterrupted()
InterruptedException
2条答案
按热度按时间wa7juj8i1#
如果要在窗口关闭时终止整个应用程序,可以使用以下方法:
如果你只想停止工作线程,或者做其他事情。您可以在框架和onwindowclosing回调中注册一个windowlistener,您可以检查事件类型并执行任何您想要的操作。
sh7euo9m2#
当所有非守护进程线程死亡时,jvm退出。工作线程不是守护进程,因此不允许jvm退出。只需让工作线程成为守护进程:
另一种方法是
interrupt()
你的线程关闭主窗口时,但这需要处理isInterrupted()
以及InterruptedException
.