我已经建立了一个按钮来启动和停止程序的某些工作负载,这将需要很长时间才能完全完成。开始或停止我的任务或多或少起作用。任务取消后,我无法再次单击该按钮来重新运行该任务。
按取消按钮后,按钮文本将切换回“开始”(按预期方式),当我再次单击“开始”按钮时,按钮文本将按预期方式切换到“停止”-但该任务确实会执行不重新开始。
如何设置该任务/按钮才能使用该按钮重新启动我的任务?
我找到了解决方案的更新
阅读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" />