执行命令this.setVisible(false)时,是否会停止在该帧上专门运行的所有线程?
如果没有,是否有一种简单的方法可以自动停止所有这些?
答案 0 :(得分:1)
我认为我们在这里有一个概念问题。没有"线程在JFrame上运行。"有一个线程the Event Dispatch Thread,运行 ALL Swing对象,框架等。
EDT(事件调度线程)不会停止,因为您使一个窗口不可见。但是,如果 ALL Swing对象变得无法访问(符合垃圾回收条件),则Swing EDT会关闭。 (下面链接的应用说明表示你也可以在一个帧上调用Window.dispose()
使其无法显示;然后它不再用于保持EDT运行。)
shutting down the EDT are in this app-note:
的更精确条件 Starting with 1.4, the behavior has changed as a result of the fix for
4030718. With the current implementation, AWT terminates all its helper
threads allowing the application to exit cleanly when the following
three conditions are true:
There are no displayable AWT or Swing components.
There are no native events in the native event queue.
There are no AWT events in java EventQueues.
在Java 1.4之前,EDT永远不会关闭。希望你不需要走那么远。
如果要关闭一组线程,则必须手动执行(除了使用某些课程方法,如System.exit()
)。我会查看Executors,它可以让您轻松管理线程。
答案 1 :(得分:0)
不,将JFrame可见性设置为false不会停止使用new Thread()
创建的所有主题。
如果没有,是否有一种简单的方法可以自动停止所有这些?
要自动停止所有这些(除非终止所有程序)
例如,您需要将它们存储在列表或矢量中,然后使用方法Thread.interrupt()
这样的事情:
for(Thread thread : threads) //where threads is a List
{
thread.interrupt();
}
答案 2 :(得分:-1)
不,不是!
Thread仍然在后台运行,但你无法与Frame交互。 要停止你可以做的所有线程:
System.exit(1)
将终止所有线程或每个线程
Thread.sleep(10000000000);
会使线程停止一段时间(以毫秒为单位)。