Я создал кнопку для запуска и остановки некоторой рабочей нагрузки моей программы, для завершения которой потребуется очень много времени.Запуск и остановка моей задачи работает более или менее.После того, как задача отменена, я не могу запустить ее еще раз, нажав кнопку еще раз.
После нажатия кнопки Отмена текст кнопок снова переключается на «Пуск» (как и ожидалось), а затем снованажмите «Пуск», текст кнопки переключается на «Стоп», как и ожидалось, - но задача не запускается снова.
Как мне настроить эту задачу / кнопку, чтобы иметь возможность перезапустить моюЗадача с этой кнопкой?
ОБНОВЛЕНИЕ Я нашел решение
После прочтения этой статьи я наконец-то заработал.По сути, я изменил класс Simulation для реализации Runnable
, создал Task
внутри этого класса, объявил Thread
в Controller.java
и вне действия кнопки -> создал экземпляр Thread
с помощьюНажмите кнопку if (Thread.isAlive() == false)
.
SimulationClass.java
public class FullSimulation implements Runnable{
// Create a Task to run the Thread with
public static Runnable task = new FullSimulation();
// This code is run as a Task
public void run() {
for (int i = 0; i < 1000000; i++) {
// Lots of Calculations....
// Check if Service is cancelled
if (Thread.interrupted()) { return; }
}
}
}
Controller.java
// Declare the Thread
Thread simulationThread;
// Press Button
public void startStop(){
if (simulationThread == null || !simulationThread.isAlive()) {
// Create new Thread it is not active right now or has not yet been instantiated
simulationThread = new Thread(new SimulationClass());
simulationThread.start();
startStopButton.setText("Stop");
}
else {
// If already instantiated and isAlive() (aka running) then send interrupt signal
simulationThread.interrupt();
startStopButton.setText("Start");
}
}
View.fxml
<Button fx:id="startStopButton" onAction="#startStop" text="Start" />