3

ループで実行され、Eclipse IDEのコンソールウィンドウでSIGINT(ctrl-c)または終了ボタンが押された場合に終了するサーバーを作成しています。終了ログを正常に出力してシャットダウンする必要があります。ただし、問題は、EclipseIDEの終了ボタンを押してシャットダウンシーケンスがトリガーされている間はprintlnが機能しないように見えることです。以下の簡単なコードを見てください。

object Test extends App {
  println("start")
  Runtime.getRuntime().addShutdownHook(new Thread {
    override def run = println("shutdown")
  })
  synchronized { wait }
}

これは、コマンドラインのscalaツールでうまく機能します。ctrl-cを押すと、「start」と「shutdown」の両方のメッセージが出力されます。しかし、Eclipse IDEで実行してコンソールウィンドウの終了ボタンを押すと、「シャットダウン」メッセージが出力されません。ただ静かに終了します。シャットダウンフック内の他のすべてが終了中に正しく実行されることを確認しました。動作しないのはprintlnだけです。

これについて何か考えはありますか?ロギング用の終了メッセージを印刷する必要があります。
よろしくお願いします!

4

3 に答える 3

4

プロセスをシャットダウンするときに、シャットダウンフックがEclipseによって実行されない:https ://bugs.eclipse.org/bugs/show_bug.cgi?id = 38016

そのバグレポートは修正されないとして解決されます

私はそれが古いバグであることを認識しているので、それ以来状況が変わったのかもしれません。

于 2012-07-18T20:07:21.993 に答える
1

あなたはscalaが提供するshutDownHookを試すことができます

sys addShutdownHook(println("shutdown")) 
于 2012-07-18T19:03:33.647 に答える
1

代わりに、シャットダウンメッセージをファイルに記録してみてください。Eclipseは、プログラムが実際に終了する前に、おそらくstdoutパイプの終わりを閉じます。

于 2012-07-18T19:09:32.680 に答える