2011-01-12 82 views
4

我有一個帶有退出按鈕的swing應用程序,該按鈕調用調用System.exit(0)的方法;但由於某種原因,JVM並未關閉。有誰知道什麼可能導致JVM繼續運行?JVM在swing應用程序退出後不關閉

+0

退出時是否有任何非守護程序線程在運行? – 2011-01-12 02:13:14

+0

[可能導致Java在System.exit()之後繼續運行的重複?](http://stackoverflow.com/questions/2614774/what-c​​an-cause-java-to-keep-running-after-system -exit) – 2011-01-12 03:28:12

回答

5

當你調用System.exit()(而守護進程線程肯定不會)但是關閉掛鉤時,非守護線程不會阻止程序結束†會,如果他們未能終止。

†請參閱Design of the Shutdown Hooks API(最初鏈接的文章現在僅在the wayback machine處可用)。

Swing可能使用關閉掛鉤,但不會阻止程序終止。但是如果你(或者你使用的某個庫)調用Runtime.addShutdownHook(),你最好確保你的關閉鉤子不會死鎖。

順便說一句,這個問題的一個解決方法是添加一個關閉掛鉤,關閉另一個等待60秒的線程,然後調用Runtime.halt()。 (您必須關閉另一個線程,否則關機掛接等待六十秒鐘將阻止程序終止六十秒。)

2

也許你有一個仍在運行的線程?

很容易找到哪些線程正在運行以及何時運行。在Netbeans中,在配置文件模式下啓動您的項目(Alt + F2)以實時創建快照。 (Profiler - > View - > Threads)

相關問題