最近我將Swing應用程序轉換爲Webstart。這個過程非常簡單,但是我發現關閉所有窗口後,我的應用程序的JVM沒有終止。線程轉儲表明有幾個非守護線程,特別是Swing的EDT,AWT和一些websart相關的線程。我是否必須在Webstart應用程序中顯式調用System.exit()?
實際使用的策略是在創建時每個窗口遞增計數器和遞減一個,當它被關閉。默認的關閉操作是DISPOSE_ON_CLOSE。溫計數器達到零,我停止所有線程池並釋放所有JNI資源。
當我推出從一個bat文件(相同的JAR文件)的應用程序,它終止罰款時,所有的窗口都關閉了,所以我想,這個問題有事情做與Webstart的。
現在的問題:
- 誰能告訴我究竟是怎麼回事?爲什麼Webstart會留下殭屍JVM?
- 有沒有一種方法可以在不停止JVM的情況下顯式釋放Webstart資源?
- 我一直有這樣的調用System.exit()鼓勵不釋放你的資源,並依託OS之後進行清理(如果以後重用代碼,這可能會導致危險的意外情況)上的草率做法的意見我錯過了什麼嗎?
另請參閱followup question以檢測該應用是否已由Webstart啓動。
謝謝,鏈接解釋了我想知道的一切。有沒有我可以投票的錯誤遊行票? (如果是,請將回復作爲對主要問題的評論發佈) – ddimitrov 2008-10-18 02:20:13