スケジュールに従ってスレッドとして実行される Main() があります。例外が発生した場合 (e.printStackTrace)、スレッドは中止され、次の開始まで待機します。
例外をスローせずにスレッドを中止できるようにしたい。Main()-Class 内では、"false を返す" だけでスレッドが終了するので、かなり簡単です。
しかし、クラス/クラスのオブジェクトの中にいるときは、それができません。サブクラス内からメインを中止/終了するにはどうすればよいですか?
スレッドを中止しますか、それとも VM をシャットダウンしますか?
VM を停止する場合は、Runtime.getRuntime().exit(0); を試してください。
任意の実行中のスレッドを停止することは、一般的に安全ではありません 。
状況をよりよく説明するために。
私があなたを正しく理解していれば、プログラム全体をシャットダウンするのではなく、一部のスレッドだけをシャットダウンしたくないですか?
run()
取得したすべてのサブメソッドから戻る必要があります。メソッドがスレッド内でどのように見えるかを示してもらえますか?
例: 関数 ( doSomething()
) から戻る場合は、メソッドから戻る必要がありますrun()
。
@Override
public void run() {
while (true) {
doSomething(); // - your main function
}
}
ちょっと状態をチェック。設定値を終了しboolean exiting = true;
てループ内で確認する場合:if (exiting) return;
スレッドを閉じる正しい方法は、メソッドから戻ることですrun
System.exit(0) を試すことができます。
それが機能するかどうかお知らせください。