我的
java应用程序发生了非常奇怪的事情.总之,问题是它有时会在30-60秒的工作后自行关闭.
具体情况如下:
>该应用程序实际上是在applet设置中启动的,applet加载主应用程序jar,将其保存到磁盘,然后通过反射启动实际程序. applet jar已签名,应用程序jar未签名,因此我必须覆盖安全管理器.代码如下:
System.setSecurityManager(new SecurityManager() {
@Override public void checkPermission(Permission p) {}
});
URLClassLoader loader = new URLClassLoader(new URL[] {mainJarFile.toURI().toURL()}, this.getClass().getClassLoader());
Class> app = Class.forName("launch.App", true, loader);
Method start = app.getDeclaredMethod("start", URL.class, URL.class);
start.invoke(app.newInstance(), codeBase, documentBase);
>只有当applet通过Citrix连接到终端服务器运行时才会发生崩溃.
事实上,事故并非崩溃.在日志文件中,我看到在正常关闭期间启动并完成关闭挂钩.
>如果在启用了java console visible和trace选项的情况下运行applet,我会在关闭之前看到以下消息:
security: JSS is not configured
network: Connecting https://javadl-esd-secure.oracle.com/update/baseline.version with proxy=HTTP @ FWR200/192.168.0.246:8080
>启动关闭挂钩后,应用程序似乎仍在运行,我在日志中看到这些异常:
2012.11.13 16:20:07.171 | def.pR.run:1639 | class java.lang.NullPointerException : null
sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source)
sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
... // so on, the exception seems to happen in completely regular app code
>最后,在Citrix服务器开始使用Java 7(特别是Java 7更新9)而不是Java 6之前,没有这样的问题.降级java似乎不是一种选择.
我完全迷失在这里.有人至少可以给我一些关于解决这个问题的建议吗?可能是什么原因?有办法解决这些问题吗?