最近我将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