執行命令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