Java插件7u40在离开带有另一个applet的页面后无法加载applet

时间:2013-10-07 12:47:15

标签: java security plugins applet

症状

我在Tomcat上运行了一个Web应用程序。 某些网页包含applet,打包并使用CA证书签名,并在清单中请求“权限:所有权限”。

我在客户端有最新的 JRE 7u40 。 当我使用applet浏览页面时,它会在没有安全性或其他警告的情况下成功加载。 当我离开此页面并在短时间内(少于60秒)返回此页面时,无法加载applet。 如果我离开页面,那么等到java.exe和jp2launcher.exe退出,然后返回页面,applet再次成功加载。

此行为已从 JRE 7u25 更改,其中applet在所有情况下都已成功加载。 此问题可在 Windows 7 with IE 8 上以及Windows 7上使用最新的Chrome 30.0.x.x重现。 我无法在Windows 8上使用IE 10重现它。

解决方法

我所知道的唯一解决方法是applet.destroy()中的System.exit()with separate_jvm applet参数。但我认为这太粗野了。 你知道其他任何解决方法吗?

技术信息

首先,我在Java控制面板中打开跟踪。 其次,我打开browser-jvm调试 JPI_PLUGIN2_DEBUG = 1
JPI_PLUGIN2_VE​​RBOSE = 1

当我使用applet离开页面时,我在applet控制台中看到以下内容,因此我认为applet已停止并被销毁。

PluginMain: processing GetAppletMessage
PluginMain: processing JavaObjectOpMessage
LiveConnectSupport: HAS_FIELD_OR_METHOD "rf"
network: Created version ID: 1.7.0.40
network: Created version ID: 1.7.0.25
LiveConnectSupport: HAS_FIELD_OR_METHOD "rf": returning result false
PluginMain: processing JavaObjectOpMessage
LiveConnectSupport: HAS_FIELD_OR_METHOD "onremove"
network: Created version ID: 1.7.0.40
network: Created version ID: 1.7.0.25
LiveConnectSupport: HAS_FIELD_OR_METHOD "onremove": returning result false
PluginMain: processing StopAppletMessage, applet ID 1
basic: Starting applet teardown
basic: Finished applet teardown
basic: Removed progress listener: sun.plugin.util.ProgressMonitorAdapter@1c24701
basic: PluginMain.unregisterApplet: 1 from mananger sun.plugin2.applet.Applet2Manager@6f403e
Applet2Manager executing destroyTGAndAC() for entry http://host:80/AppName/applet/,myapplet.jar

当我在短时间内(少于60秒)重新访问该页面时,我在与浏览器进程关联的调试命令窗口中看到以下错误。

  

尝试启动applet
  线程“Thread-0”中的异常   java.lang.InternalError:找不到正在运行的JVM实例但是没有   匹配JRE平台           at sun.plugin2.main.server.JVMManager.getBestJVMInstance(Unknown Source)           at sun.plugin2.main.server.JVMManager.getOrCreateBestJVMInstance(未知   资源)           at sun.plugin2.main.server.JVMManager.startAppletImpl(Unknown Source)           at sun.plugin2.main.server.JVMManager.startApplet(Unknown Source)           at sun.plugin2.main.server.JVMManager.startApplet(Unknown Source)           at sun.plugin2.main.server.IExplorerPlugin.maybeStartApplet(未知   资源)           at sun.plugin2.main.server.IExplorerPlugin.access $ 200(未知来源)           at sun.plugin2.main.server.IExplorerPlugin $ BackgroundStarter $ 1.run(Unknown   资源)           在sun.plugin2.main.server.IExplorerPlugin $ 1.run(未知来源)

1 个答案:

答案 0 :(得分:3)

我发现了

<param name="separate_jvm" value="true"/>

已经足够了。