我的 java 应用程序发生了非常奇怪的事情。总之,问题在于它有时会在工作 30-60 秒后自行关闭。
具体情况如下:
应用程序实际上是在小程序设置中启动的,小程序加载主应用程序 jar,将其保存到磁盘,然后通过反射启动实际程序。小程序 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);
只有当小程序通过
Citrix
连接到终端服务器运行时才会发生崩溃。- 事实上,崩溃并不是崩溃。在日志文件中,我看到关闭挂钩在正常关闭期间已按应有的方式启动和完成。
如果小程序在 java 控制台可见且
trace
选项打开的情况下运行,我会在关机前看到以下消息: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 update 9)而不是Java 6
. 降级java似乎不是一种选择。
我完全迷失在这里。有人至少能给我一些关于解决这个问题的建议吗?可能是什么原因?有没有办法解决这些问题?