福州医疗网站建设,wordpress 相片,做网站的股哥,用织梦做的网站在JavaFX中#xff0c;要实现点击按钮启动多个周期性任务并通过多线程执行#xff0c;并在任务结束后将结果写入多个文本组件中#xff0c;同时提供另一个按钮来停止这些任务#xff0c;你可以使用ScheduledExecutorService来管理周期性任务#xff0c;并使用AtomicBoolea…在JavaFX中要实现点击按钮启动多个周期性任务并通过多线程执行并在任务结束后将结果写入多个文本组件中同时提供另一个按钮来停止这些任务你可以使用ScheduledExecutorService来管理周期性任务并使用AtomicBoolean来控制任务的执行与停止。
以下是一个简化的示例展示了如何实现这一功能
设置JavaFX界面包括两个按钮一个启动一个停止和多个文本区域用于显示结果。创建周期性任务这些任务将周期性地执行并在完成时更新UI。管理线程使用ScheduledExecutorService来调度任务并使用AtomicBoolean来安全地控制任务的执行。
示例代码
import javafx.application.Application;
import javafx.application.Platform;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;public class TaskSchedulerExample extends Application {private ScheduledExecutorService scheduler Executors.newScheduledThreadPool(2);private AtomicBoolean running new AtomicBoolean(false);Overridepublic void start(Stage primaryStage) {TextArea textArea1 new TextArea();TextArea textArea2 new TextArea();Button startButton new Button(Start Tasks);startButton.setOnAction(e - {running.set(true);scheduleTask(() - updateTextArea(textArea1, Task 1 result: System.currentTimeMillis()), 1, TimeUnit.SECONDS);scheduleTask(() - updateTextArea(textArea2, Task 2 result: System.currentTimeMillis()), 2, TimeUnit.SECONDS);});Button stopButton new Button(Stop Tasks);stopButton.setOnAction(e - running.set(false));VBox root new VBox(10, startButton, stopButton, textArea1, textArea2);Scene scene new Scene(root, 300, 200);primaryStage.setTitle(Task Scheduler Example);primaryStage.setScene(scene);primaryStage.show();}private void scheduleTask(Runnable task, long period, TimeUnit timeUnit) {scheduler.scheduleAtFixedRate(() - {if (running.get()) {task.run();} else {// 停止调度scheduler.shutdownNow();}}, 0, period, timeUnit);}private void updateTextArea(TextArea textArea, String text) {Platform.runLater(() - {textArea.appendText(text \n);});}public static void main(String[] args) {launch(args);}
}说明
UI组件TextArea用于显示任务结果Button用于控制任务的启动和停止。任务调度使用ScheduledExecutorService的scheduleAtFixedRate方法来周期性地执行任务。任务停止通过AtomicBoolean的get方法检查是否应该继续执行任务。如果running为false则调用scheduler.shutdownNow()来尝试停止所有正在执行的任务。UI更新由于JavaFX的UI更新必须在JavaFX应用线程上执行因此使用Platform.runLater来更新TextArea。
请注意这个示例中的shutdownNow()尝试停止所有任务但已经启动但尚未完成的任务可能不会被立即停止。如果需要更严格的停止机制你可能需要在任务内部实现更复杂的逻辑来检查是否应该停止执行。