【问题标题】:What is the proper way to handle the closing of a java applet?处理java小程序关闭的正确方法是什么?
【发布时间】:2010-06-24 02:36:12
【问题描述】:

我们有一个在浏览器窗口之外运行的 java 小程序。我一直认为单击 X 关闭窗口(或右键单击任务栏并选择关闭)是关闭小程序所需的全部操作。

但是,事实证明,当以这种方式关闭时,我们的小程序每次都会使 Safari(在 Mac 和 Windows 中)崩溃。

当小程序关闭时,我应该在代码中做些什么吗?在代码中想到的第一个罪魁祸首是一个为 Jabber/XMPP 进行套接字连接的类/库。

【问题讨论】:

  • 你真的应该关闭所有可关闭的资源,以防JVM被回收。但是,它永远不应该“崩溃”。

标签: java applet


【解决方案1】:

在您的小程序中使用destroy() 生命周期回调来处理您打开的所有资源(线程、套接字等)。如果您不因浏览器而异,但根据我的经验(主要是 Firefox)线程通常会继续运行,会强制重启浏览器以重新加载您的应用程序。不光滑。由于这个原因,我还没有看到崩溃,但无论如何处置资源是一种好习惯。

【讨论】:

  • 我还注意到,如果我用小程序重新加载页面,它不会重新启动 VM,即不会重新创建单例等。
  • 是的,您需要避免使用静态变量、单例等。只需对您的应用程序进行编码,以便您可以在虚拟机上并行运行多个应用程序,就可以了。无论如何都要好好练习。
  • 关于如何追踪导致浏览器崩溃的任何建议?我添加了一个 destroy() 并在 Jabber 客户端上断开连接,然后分配给 null...但仍然看到问题。
  • 你可以用jconsole附加,看看JVM崩溃后是否继续运行。如果它崩溃了,你应该在某个地方得到一个 hs_err_pidxxx.log,试着找到它。如果没有,浏览器可能会独立于 VM 崩溃。在调试器中运行浏览器或尝试获取故障转储。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多