JFrame setVisibility(false)是否会停止我创建的所有线程?

时间:2017-04-23 19:13:30

标签: java

执行命令this.setVisible(false)时,是否会停止在该帧上专门运行的所有线程?

如果没有,是否有一种简单的方法可以自动停止所有这些?

3 个答案:

答案 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);会使线程停止一段时间(以毫秒为单位)。