2014-01-09 20 views
0

有沒有辦法使用現有的線程(特別是主線程)來使用AWT窗口。我目前正在打開一個Frame,然後處理所有內容,主線程暫停並等待窗口關閉。對我來說,這看起來像是一種(不是非常具有毀滅性的)資源浪費,所以我只想用AWT的主線。有沒有一個很好的理由,爲什麼沒有這樣做,如果沒有,是否有辦法做到這一點?使用現有的Java線程AWT

+0

爲什麼選擇AWT而不是Swing?看到我對[Swing extras over AWT]的回答(http://stackoverflow.com/a/6255978/418556)有很多很好的理由放棄使用AWT組件。如果您需要支持較老的基於AWT的API,請參閱[混合重量級和輕量級組件](http://www.oracle.com/technetwork/articles/java/mixing-components-433992.html)。 –

+0

AWT因爲我只是打開一個框架爲JOGL,並沒有任何GUI。 GUI是在OpenGL中手動繪製的 – th3falc0n

+0

謝謝澄清。這是有道理的.. –

回答

3

只要讓主線程退出,就沒有必要保持它暫停和等待。

線程可以被標記爲守護進程或沒有。應用程序只在每個非守護線程退出時退出,在Java中,主線程除了首先啓動的事實之外沒有任何特別的意義。

EDT線程不是一個守護程序線程,所以它會使應用程序保持自己的活動狀態。

What is Daemon thread in Java?

+0

好吧,我覺得這會關閉整個應用程序。 – th3falc0n

+0

查看擴展的答案。 –

0

一個暫停的線程(如果它甚至實際上已暫停)是不是一個真正的大問題。我建議你看看你的程序,比如JProfiler,你會對後臺發生的事情感到震驚。

2

基於這個文檔http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html

當Java虛擬機啓動時,通常有一個單一的非守護線程(它通常會調用名爲main一些指定類的方法)。 Java虛擬機繼續執行線程,直到發生以下任一情況:

Runtime類的退出方法已被調用,並且安全管理器已允許執行退出操作。 所有不是守護進程線程的線程都已死亡,無論是從調用返回的run方法還是通過拋出傳播超出run方法的異常。

這個故事的寓意:

A Java program will wait for all non-daemon threads to finish first. 

在你的情況,你可能想退出主線程。

相關問題