执行命令this.setVisible(false)时,它是否停止专门在该框架上运行的所有线程?JFrame setVisibility(false)是否停止我创建的所有线程?
如果没有,是否有一种简单的方法可以自动停止它们?
执行命令this.setVisible(false)时,它是否停止专门在该框架上运行的所有线程?JFrame setVisibility(false)是否停止我创建的所有线程?
如果没有,是否有一种简单的方法可以自动停止它们?
我认为,我们在这里有一个概念性的问题。没有“在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,它使您能够相当容易地管理线程。
这是我需要的,谢谢。另外,我指的是新的Thread()类型的线程。 –
那么,所有的线程基本上是相同的,但如果你的意思是以'new Thread()。start()'开头的线程,那么当隐藏窗口时,那些线程不会关闭。 – markspace
不,它不!
线程仍然在后台运行,但您不能与框架交互。 停止所有线程,你可以这样做:
System.exit(1)
这将终止所有线程或每个线程 Thread.sleep(10000000000);
这将停止线程一定量的时间(毫秒)。
不,将JFrame可见性设置为false将不会停止使用new Thread()
创建的所有线程。
如果没有,是否有一种简单的方法可以自动停止它们?
要停止所有的人都自动是没有办法(除非终止所有程序)
你需要将它们存储在一个列表或载体,例如,然后使用方法Thread.interrupt()
事情是这样的:
for(Thread thread : threads) //where threads is a List
{
thread.interrupt();
}
你是什么意思“所有线程”? Swing程序中只有一个线程,除非您使用例如'new Thread()'或'new SwingWorker()'。 – Radiodef
是的,我做了新的线程(),也是一个线程线程=新的线程()。 –
嗯,Swing程序中的两个线程:主线程(启动程序)和EDT(Event Dispatch Thread),其中所有Swing操作都应该发生。 – markspace