Runnableインターフェースを実装するオブジェクトがいくつかあり、それらを別々のThreadsで実行します。基本的にrun()
、Runnable オブジェクトのメソッドで、(ネットワークからの) 入力を待機している間にブロックするメソッドの呼び出しを含むいくつかのネットワーク アクティビティを実行します。Thread.sleep()
意図的な一時停止、つまり呼び出しがないことに注意してください。一時停止は、ブロックする可能性のあるメソッドの呼び出しによって発生します。
これらのRunnableオブジェクトはGUIの制御下にあるため、GUIインターフェイスとユーザーに提供したい機能の1つは、Runnableオブジェクトを実行しているスレッドを終了する機能ですが、これを行う方法を理解できません。
明白な手段の 1 つは、Runnable オブジェクト Thread の Thread.interrupt() メソッドを呼び出すことですが、この Thread メソッドへの呼び出しはどのようにして Runnable オブジェクトに伝達されるのでしょうか? たとえば、私は try-catch を使用できませんInterruptedException
。Runnable オブジェクトでのキャッチは許可されていないようです。私のIDE(netbeans)は、メソッドInterruptedException
で決してスローされないと文句を言います。run()
私のコードは以下のとおりで、簡潔にするために削除されています。次の行は、GUI スレッドの GUI コードで実行されます。
digiSearch = new DigiSearch(hostIP,this);
digiSearchThread = new Thread(digiSearch);
digiSearchThread.start();
以下は私のRunnableクラスであり、実行中のスレッドの中断をキャプチャしたい/キャプチャする必要がある場所です。
public class DigiSearch implements Runnable {
private String networkAdapterIP;
private DigiList digiList;
public DigiSearch (String ipAddress, DigiList digiList){
networkAdapterIP = ipAddress;
this.digiList = digiList;
}
@Override
public void run() {
try{
/*
* Do some network and other activities here which includes calling some blocking methods. However I would like to interrupt the run() method if possible by calling Thread.interrupt()
*/
} catch (Exception ex){
digiList.digiListException(ex);
} catch (Throwable t){
System.out.println("Search thread interrupted");
}
}
}
これを達成する方法や、スレッドを中断するという私の誤解を解決する方法について誰かが教えてくれますか?