gpt4 book ai didi

java - 在 JavaFX 应用程序线程上执行 TimerTasks 是否有比嵌套匿名 Runnable 更优雅的方法?

转载 作者:行者123 更新时间:2023-11-30 08:09:32 25 4
gpt4 key购买 nike

假设我有一个自定义 TimerTask做事。

所以通常计时器任务看起来像这样:

public class MyTimerTask extends TimerTask {
@Override
public void run() {
// Do work...
}
}

我通过 Timer 安排它连续重复循环每 10 秒执行一次。

Timer myTimer = new Timer();
MyTimerTask myTask = new MyTimerTask();
myTimer.schedule(myTask,0,10000);

在正常情况下,这工作得很好,但由于我在此任务中执行一些 GUI 更新操作,我必须调用 Runnable来自 JavaFX 应用程序线程。

本质上,这意味着我必须调用 Platform.runLater关于 Runnable (MyTimerTask) 当我想运行它时。

但是,由于我通过 Timer.schedule 将其放入任务队列,因此我没有显式调用任务上的 run() ,我必须将 MyTimerTask 更改为如下所示:

public class MyTimerTask extends TimerTask {
@Override
public void run() {
Platform.runLater(
new Runnable() {
public void run() {
//Do work...
}
}
);
}
}

这感觉是一种非常粗糙的方法。

所以我想知道是否有更好的方法来做到这一点?

最佳答案

JavaFX 具有动画包,也可用于定期更新 UI。

看看类(class) Timeline :

Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(10),
new EventHandler<ActionEvent>() {
public void handle(ActionEvent ae) {
// do stuff
}
}
));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();

时间线将在JavaFX线程中自动执行。

关于java - 在 JavaFX 应用程序线程上执行 TimerTasks 是否有比嵌套匿名 Runnable 更优雅的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30589470/

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