0

重複の可能性:
Java:CLIアプリケーションでCtrl + Cを「インターセプト」するにはどうすればよいですか?

Windowsで、タスクを実行するJava非GUIアプリケーションを開始します。次にCNTL-Cを押すと、プログラムが終了します。割り込み処理コードはトリガーされないようです。mainメソッドにtry / catchを入れても、スタックトレースが表示されないことを示します。中断されました。

public static void main(final String[] args) throws Exception
{
    try
    {
         CmdLineDecoder cld = new CmdLineDecoder();
         cld.start(args);
         System.exit(0);
    }
    catch(Exception e)
    {
         e.printStackTrace();
        throw e;
    }
}

私は明らかにCntl-Cの効果を誤解していますが、何ですか?

4

1 に答える 1

2

Javaで一般的な信号処理を行うことはできませんが、を処理することはできますCtrl-c

VMのシャットダウン時に何かを行う必要がある場合は、シャットダウンフックRuntime.addShutdownHookを使用します。

ドキュメントから:

Java仮想マシンは、次の2種類のイベントに応答してシャットダウンします。

プログラムは、デーモン以外の最後のスレッドが終了したとき、またはexit(同等にSystem.exit)メソッドが呼び出されたとき、または

仮想マシンは、^ Cの入力などのユーザー割り込み、またはユーザーログオフやシステムシャットダウンなどのシステム全体のイベントに応答して終了します。

私は過去にWindows/OSXでこれを使用しました。

于 2012-08-22T22:17:12.120 に答える