我是否必须在Webstart应用程序中显式调用System.exit()?

最近,我将Swing应用程序转换为Webstart。这个过程非常简单,但是我发现在关闭所有窗口之后,应用程序的JVM没有终止。线程转储显示有两个非守护进程线程,特别是Swing的EDT,AWT和几个与Websart相关的线程。

实际使用的策略是,每个窗口在创建时都会增加一个计数器,在关闭时会减少一个。默认关闭操作为DISPOSE_ON_CLOSE。当计数器达到零时,我停止所有线程池并释放所有JNI资源。

当我从bat文件(相同的JARs)启动应用程序时,当所有窗口都关闭时,它可以正常终止,因此我认为问题与Webstart有关。

现在的问题:

  1. 有人可以告诉我到底是怎么回事吗?为什么Webstart会留下僵尸JVM?
  2. 有没有一种方法可以在不停止JVM的情况下显式释放Webstart资源?
  3. 我一直认为,调用System.exit()会鼓励您不要放开资源,而是依靠操作系统来清理您之后的草率做法(如果以后再使用代码,可能会导致令人讨厌的意外)…我错过了什么吗?

回答:

因为WebStart中的错误,所以可以。WebStart出于与EDT交互的目的而启动了一个“安全线程”。此SecureThread防止在处置所有窗口和AWT资源时自动终止Java进程。

有关更多信息,请参见http://www.pushing-pixels.org/?p=232

以上是 我是否必须在Webstart应用程序中显式调用System.exit()? 的全部内容, 来源链接: utcz.com/qa/404794.html

回到顶部