私の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
Java 7
そして最後に、これらの Citrix サーバーがの代わりに (具体的には Java 7 update 9)を使用し始めるまで、このような問題はありませんでしJava 6
た。Javaのダウングレードはオプションではないようです。
私はここで完全に迷っています。この問題を解決するためのヒントを誰かが教えてくれませんか? 原因は何ですか?これらの問題を回避する方法はありますか?