JRE の更新後に問題が発生しました。
Java アプリケーションを起動してシステムの再起動を開始すると、Windows はこの Java アプリケーションを自動的に停止できず、 「このプログラムは Windows の再起動を妨げています」というメッセージが表示されます。 キャンセルを押すと、再起動を防止する Java アプリケーションがハングすることがわかりました。この問題は、Java アプリケーションと jconsole などのアプリケーションの両方に影響します。
JRE を更新する前は、すべてJRE 1.6.0_26で正常に動作します。私は最初にJRE 1.6.0_36でこの問題に直面しました。ただし、1.6.0_39 でも発生します。
PS: Windows Server 2008 R2 Interprise を使用しています。
誰かが同じ問題を抱えているか、この状況で何をすべきかを提案できますか? ありがとう。
更新: 次の addhook を実装しました:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
logger.log("SHUTDOWN - BEGIN");
((Window) view).setVisible(false);
logger.log("SHUTDOWN - Visible");
((Window) view).dispose();
logger.log("SHUTDOWN - Dispose");
System.exit(0);
}
});
その後、そのような addhook を持つアプリケーションはシステムの再起動時に正常に終了しますが、(exit または "x" を押して) アプリケーションを閉じるだけでは Java VM が終了しないことがわかりました (taskmgr で javaw プロセスを確認できます)。
ログ ファイルから、プログラムが dispose() 関数を決して離れないことがわかりました。dispose() をコメントして System.exit(0) だけを残すと、Java VM はまだ終了できません。
更新 2: この問題のチケットが作成されました。そして、オラクルから「問題が再現され、確認されました」という返事がありました。