gpt4 book ai didi

JavaFX周期性后台任务

转载 作者:行者123 更新时间:2023-12-01 17:19:28 24 4
gpt4 key购买 nike

我尝试定期在 JavaFX 应用程序后台线程中运行,这会修改一些 GUI 属性。

我想我知道如何使用 javafx.concurrent 中的 TaskService 类,但不知道如何运行此类不使用 Thread#sleep() 方法的周期性任务。如果我可以使用 Executors 中的一些 Executor 制作方法 (Executors.newSingleThreadScheduledExecutor())

我尝试每 5 秒运行一次 Runnable,这会重新启动 javafx.concurrent.Service 但它会立即挂起,因为 service.restart 甚至调用 service.getState()

所以最后我使用了 Executors.newSingleThreadScheduledExecutor(),它每 5 秒触发一次 Runnable,并且 Runnable 运行另一个 Runnable 使用:

Platform.runLater(new Runnable() {
//here i can modify GUI properties
}

它看起来非常令人讨厌:(有没有更好的方法使用 TaskService 类来做到这一点?

最佳答案

您可以使用时间轴来完成该任务:

Timeline fiveSecondsWonder = new Timeline(
new KeyFrame(Duration.seconds(5),
new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
System.out.println("this is called every 5 seconds on UI thread");
}
}));
fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE);
fiveSecondsWonder.play();

对于后台进程(不会对 UI 执行任何操作),您可以使用旧的好的 java.util.Timer:

new Timer().schedule(
new TimerTask() {

@Override
public void run() {
System.out.println("ping");
}
}, 0, 5000);

关于JavaFX周期性后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61323562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com