8

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: この問題のチケットが作成されました。そして、オラクルから「問題が再現され、確認されました」という返事がありました。

4

3 に答える 3

5

matts、これはすべての Java アプリケーションで発生します。2008 OS と JRE 6U37 のみを搭載したサーバーでテストされています。Java コントロール パネルを起動してからサーバーを再起動しようとすると、Windows メッセージが表示されます。

アプリが最小化されている場合、メッセージは表示されません。

メッセージ「このプログラムは Windows の再起動を妨げています」

「強制再起動」または「キャンセル」オプションを選択すると、Java コントロール パネルがハングし、javaw.exe プロセスが 25% cpu で実行されます。これはクアッド プロセッサ サーバー上にあるため、これは 100% の CPU で実行される単一のプロセッサです。

オリバー

于 2013-02-07T17:19:54.097 に答える
0

この問題はOracleによって修正されました。修正は、JREの次のバージョン(1.6.0_42?)に含まれる予定です。

アプリケーションの回避策として、addhookを使用できます。このようなもの:

    Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
    ((Window) view).setVisible(false);
    Runtime.halt(0);
    }
    });

現在のバージョンのJREではJavaマシンがSystem.exit(0)の後で停止することを拒否するため、System.exit(0)の代わりにRuntime.halt(0)を使用する必要があります。

于 2013-02-21T09:51:35.767 に答える