我刚刚将我的 Java 插件升级到 1.7.0_25,这导致我几年前编写的一个小程序出现致命错误(此后一直在维护)。
在我调用的小程序的 init() 方法的早期
logger = Logger.getAnonymousLogger();
此调用自 Java 1.4.2 以来一直在运行,没有出现任何问题。现在,使用 Java 1.7.0_25(至少在 Windows 7 上;我没有 Mac 或 Linux 机器可以在这里测试),第一次加载小程序时,它工作得很好。但是,如果关闭小程序的浏览器页面并再次加载页面,小程序将失败并显示以下控制台消息:
basic: Applet loaded.
basic: Applet resized and added to parent container
basic: PERF: AppletExecutionRunnable - applet.init() BEGIN ; jvmLaunch dt 756747 us, pluginInit dt 76093467 us, TotalTime: 76850214 us java.lang.NullPointerException
at java.util.logging.Logger.doSetParent(Unknown Source)
at java.util.logging.Logger.getAnonymousLogger(Unknown Source)
at java.util.logging.Logger.getAnonymousLogger(Unknown Source)
at com.optix.applet.viewer.ObjectViewer.init(ObjectViewer.java:214)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Ignored exception: java.lang.NullPointerException
要再次加载小程序,我必须关闭并重新启动浏览器。
自 Java 1.4 中引入 java.util.logger 以来,任何以前的 Java 版本都从未发生过这种情况。
应该没有权限问题:我已将新属性添加到 META-INF/MANFEST.MF
Permissions: all-permissions
Codebase: *
正如http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/no_redeploy.html中所要求的那样。该小程序使用当前的 GoDaddy 证书进行签名并加盖时间戳。
我发现如果我创建记录器
logger = Logger.getLogger(String);
小程序每次都会加载。
我找不到关于这个错误的任何信息。有人看过吗?有谁知道是什么原因导致它出现在 Java 1.7.0_25 中,或者为什么调用会在浏览器会话中工作一次但不会第二次?