Я стучу головой о стол, здесь друзья. Это то, что я пытаюсь выполнить. У меня есть класс Main, который создаст новый поток. Прямо сейчас, когда поток будет работать, он выполнит незначительную очистку, и поток остановится. Тем не менее, у меня есть кнопка «Стоп» в пользовательском интерфейсе, которая при нажатии должна «сделать некоторую очистку, а затем убить поток». Проблема в том, что я не могу обновить что-либо, что находится внутри этого нового потока, который я создал .Java - Невозможно остановить выполнение из основного класса
Вот некоторые фрагменты:.
Main Class
runner = new Thread(new Controller1(options));
runner.start();
в приведенном выше коде, я звоню класс Controller1 и установить некоторые "варианты" в конструкторе Это работает хорошо до сих пор ...
Теперь, в классе Controller1, это значение t I have ...
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");
}
Проблема в том, что из класса Main я не могу позвонить или установить «остановлен» на true. Я могу вызвать runner.interrupt(), но проблема в том, что, поскольку поток просто умирает, моя функция killAll() никогда не запускается, и я остаюсь с запущенным WebDriver и прокси.
Хорошая точка в цикле While, я думаю, я положил ее туда, потому что я пытался найти способ остановить эту тему от моего Main. Теперь, когда я его удалил, да, он запускается один раз, но есть ли у него переопределение, которое выведет его из метода run() и в killAll()? – Whnunlife
Любые блокирующие вызовы в этом цикле? – Tudor
@Whnunlife Если вы найдете какой-либо ответ полезным, вы должны его перенести и/или принять, т.е. Грей ответил. –