2010-08-15 84 views
2

爲什麼如果我創建一個JFrame,那麼程序仍然運行直到(即)我用窗口的小「退出按鈕」關閉它?JFrame和爲什麼要繼續運行

我找了這個答案,我失敗了。我唯一想到的是,當我做new JFrame()時,它就像一個特殊的new,它保留了EDT中對象的引用,所以它總是被引用(即使它是一個匿名的「新」),它不會是被垃圾收集器刪除。然後,一旦窗戶關閉事件觸發,對象被解除引用並銷燬。

回答

7

嘗試,yourFrame.setCloseOperation(JFrame.EXIT_ON_CLOSE)

它繼續運行的原因是所謂的事件分派線程繼續在後臺運行,只要你有非守護線程運行,應用程序不會終止。從線程文檔:

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

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

這並不是說揭開序幕「GUI線程」 JFrame的創建。當框架變得可見並且可能需要分派事件時,該線程被啓動。

相關問題