私のプログラムでは、キーを押すと停止する機能があります。私はその目的のために設定されたネイティブのキーボードフックを持っています。今、私はSystem.exit(0)を呼び出すときにそのキーが検出されます。しかし、私はプログラムを終了し、その操作を停止し、呼び出された場所に戻るだけではありません。例を以下に示します。Javaのキー押下で関数の実行を戻したり停止したりする
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");
}
}
私はので、私はThread.interrupt()
を呼び出すことができますが、私は関数呼び出しではなく、非ブロッキングを阻止したいスレッド内のfoo()への呼び出しを入れて試してみました。また、foo()
にIOコールをブロックしているので、必要がないかぎり割り込みを処理しないでください。ClosedByInterruptException
例外を処理しなければならず、問題が発生しています。
foo()
の本体も非常に長く、内部に多くの関数呼び出しがあるため、関数内にif (stop == true) return;
を記述することはオプションではありません。
これを行うには、ブロッキングスレッドを作成するよりも良い方法はありますか?もしそうなら、どうですか?そうでない場合は、どのようにスレッドをブロックするのですか?
あなたの質問は不明である(http://www.exampledepot.com/egs/java.lang/PauseThread.htmlなく、私自身の仕事から撮影します)。その時点で何が行われていても、キーが押されていても、 'foo()'をすぐに返すようにしたいのですか?あなたは 'foo'がI/O呼び出しをブロックしていると言っています...' foo'がキーを押したときにブロック呼び出し中であれば、すぐに中断しますか? –
いいえ、私はすぐに中断させたいです。私が言及したとき、私は別の例外( 'ClosedByInterruptException')をどのように捕らえなければならないのか考えていました。しかし、私はそれが何をしているにせよそれを止めることを間違いなく望んでいます。私はポストでそれを明らかにした。 – gsingh2011
英語では、「いいえ、***はほしくない」、「はい、***は***したい...」のいずれかです。あなたの返信は依然としてあいまいです。明らかにしてください。 –