如何在Java(FX)中从头开始重新启动先前已停止的任务?

时间:2019-04-26 13:17:51

标签: java multithreading javafx task

我已经建立了一个按钮来启动和停止程序的某些工作负载,这将需要很长时间才能完全完成。开始或停止我的任务或多或少起作用。任务取消后,我无法再次单击该按钮来重新运行该任务。

按取消按钮后,按钮文本将切换回“开始”(按预期方式),当我再次单击“开始”按钮时,按钮文本将按预期方式切换到“停止”-但该任务确实会执行重新开始。

如何设置该任务/按钮才能使用该按钮重新启动我的任务?

我找到了解决方案的更新

阅读this article后,我终于开始使用它了。基本上,我要做的是更改我的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" />

0 个答案:

没有答案