私はここの机の上の机と私の頭を叩いています。これが私が達成しようとしていることです。私は新しいスレッドを作成するメインクラスを持っています。現在、スレッドが正常に終了すると、それはマイナーなクリーンアップを行い、スレッドは停止します。しかし、私はUI上に「停止」ボタンがあり、押されたときには「クリーンアップしてからスレッドを終了する」必要があります。問題は、私が作成した新しいスレッドの中にあるものは更新できないようですここでJava - メインクラスの実行可能ファイルを停止できません
がいくつか抜粋です:上記のコードで
メインクラス
runner = new Thread(new Controller1(options));
runner.start();
、私は私のController1クラスを呼び出して、コンストラクタでいくつかの「オプション」を設定しています。これは良い取り組んでいます。これまでのところ...
ここで、Controller1クラスでは、これはwhaです私は...
public volatile static boolean stopped;
public void run() {
while(!stopped){
System.out.println("In run");
startProxy(proxyPort);
startWebDriver();
driver.get(http);
UIMainJSwing1.updateStartButton();
stopped=true;
}
//Run killAll to stop webdriver and the proxy
killAll();
System.out.println("Thread complete");
}
問題は、メインクラスから、私は呼び出すことはできませんまたは "停止"をtrueに設定します。私はrunner.interrupt()を呼び出すことができますが、問題は、スレッドが死ぬだけで、killAll()関数は実行されていないため、WebDriverとProxyを実行したままです。
Whileループの良い点は、メインからこのスレッドを停止する方法を見つけようとしていたので、そこに配置したと思います。これで私はそれを削除しました。はい、それは一度実行されましたが、run()メソッドとkillAll()に取り消すオーバーライドを持つことはありますか? – Whnunlife
そのループ内の呼び出しをブロックしていますか? – Tudor
@Whnunlifeあなたが何か助けになることが分かったら、あなたはそれをアップヴォートするか、またはそれを受け入れるべきです。グレイの答え。 –