2012-04-14 37 views
0

如果我拋出一個未經檢查的異常主要,將永遠不會崩潰的程序。我問,因爲我正在運行一個GUI,並且它目前不會使程序崩潰。他們通常會崩潰還是隻在某些情況下?圖形用戶界面Java未經檢查的異常拋出主

堆棧溢出在我身上墜毀,所以我沒有意識到這個問題發佈了兩次,我覺得這將是錯誤的有兩個副本。這是同一個問題。

回答

5

檢查未經檢查的異常將導致主線程崩潰。但是,這並不意味着JVM將退出。當沒有非守護進程線程正在運行時,JVM退出。如果您正在運行GUI應用程序,那麼UI事件循環是一個非守護線程,它將保持JVM運行直到它完成。

+0

因此,如果主線程退出,並且我拋出一個異常只是被忽略,不管是選中還是取消選中? – rubixibuc 2012-04-14 06:19:01

+0

它不會被忽略。它崩潰了你的主線程。主線程執行停止在你拋出異常的地方,並且它異常退出(用JLS術語)。此外,請注意,如果您在主線程中提升它,則需要在main中聲明一個檢查的異常。示例:public static void main(String ... args)引發Exception。 – 2012-04-14 06:23:57

+0

在創建GUI後,如果沒有其他任務必須執行,主線程是否會終止?或者當你說主線程是你指的是當前正在運行的線程?這並不是說從主方法運行線程 – rubixibuc 2012-04-14 06:25:43

1

如果我把一個未經檢查的異常拋出main,那會不會使程序崩潰。

從技術層面上講,當JVM遇到嚴重的內部錯誤並將包含寄存器內容和各種其他模糊內容的崩潰轉儲輸出到文件時,會發生崩潰。

當主線程由於未捕獲的異常而退出時,這不是崩潰。從JVM的角度來看,它是有序關閉的。

錢德拉的回答解釋了JVM關機正常怎麼回事了,儘管他沒有提到調用System.exit()是其他的方式來啓動有序關閉。

0

用try-catch(Throwable t)包裝主要方法中的所有代碼。這抓住了一切。