Java Daemon (Daemon と Runnable を実装するクラス) を作成しましたが、現在、次の問題に直面しています。
init() で、新しいスレッドを作成します。Thread thread = new Thread(this);
start() で、新しいスレッドを開始します。thread.start()
. 実行中、私はさまざまなことをたくさん行います....すると例外が発生します。(私の場合: NullPointerException.)。
ここで、run() で例外をキャッチし、stop() を呼び出します。そこで を呼び出しますthread.join()
が、これは決して終了せず、InterruptedException はスローされません。どうすればこの問題を解決できますか?
run() では、while ループでいくつかのことを行います
private Thread thread;
public void init() {
// if init is successful: this.thread = new Thread(this);
// if init is not successful: call stop()
}
public void run() {
try{
// do something
while (!this.stopping)
{
// do somthing
}
} catch (Exception e) {
//do something and then call stop()
}
}
public void stop() {
this.stopping = true;
thread.join(); // catch InterruptedException if it did not work
// do some more things
}
ここで例外がスローされます。停止は揮発性であり、停止が呼び出されるとすぐに true に設定します。
ありがとうございました :-)
たくさんの答えが得られましたが、まだこの問題は解決していません。run() または init() メソッドで手動で stop() を呼び出すべきではないと誰もが言いました。私の問題は、init() または run() で例外が発生したときに、プログラムを本当に停止したいということです。プログラムがもう実行されないように、それを終了します。stop() を呼び出さずにこれを達成する方法がわかりません。run() が終了するまで待つだけではうまくいきません。また、例外の問題を処理する方法もまだわかりません。