Как я могу перезапустить предыдущую остановленную задачу с нуля в Java (FX)? - PullRequest
0 голосов
/ 26 апреля 2019

Я создал кнопку для запуска и остановки некоторой рабочей нагрузки моей программы, для завершения которой потребуется очень много времени.Запуск и остановка моей задачи работает более или менее.После того, как задача отменена, я не могу запустить ее еще раз, нажав кнопку еще раз.

После нажатия кнопки Отмена текст кнопок снова переключается на «Пуск» (как и ожидалось), а затем снованажмите «Пуск», текст кнопки переключается на «Стоп», как и ожидалось, - но задача не запускается снова.

Как мне настроить эту задачу / кнопку, чтобы иметь возможность перезапустить моюЗадача с этой кнопкой?

ОБНОВЛЕНИЕ Я нашел решение

После прочтения этой статьи я наконец-то заработал.По сути, я изменил класс 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" />
...