プログラムに、キーを押すと停止したい特定の機能があります。そのためにネイティブキーボードフックを設定しました。現在、そのキーが検出されたときに System.exit(0) を呼び出します。ただし、プログラムを終了したくはありません。その操作を停止して、呼び出された場所に戻るだけです。以下に例を示します。
public class Main {
public static void main(String[] args) {
System.out.println("Calling function that can be stopped with CTRL+C");
foo(); // Should return when CTRL+C is pressed
System.out.println("Function has returned");
}
}
foo() の呼び出しをスレッドに入れて呼び出すことができるようにしましたThread.interrupt()
が、関数呼び出しを非ブロックではなくブロックにしたいです。また、ブロッキング IO 呼び出しがあるため、例外を処理する必要があり、以前に問題が発生しfoo()
たため、必要でない限り割り込みを処理したくありません。ClosedByInterruptException
また、 の本体foo()
は非常に長く、内部に多くの関数呼び出しが含まれているためif (stop == true) return;
、関数に書き込むことはできません。
ブロッキングスレッドを作成するよりも良い方法はありますか? もしそうなら、どのように?そうでない場合、ブロック スレッドを作成するにはどうすればよいですか?