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

时间:2015-06-02 07:02:20

标签: java timer javafx timertask anonymous-inner-class

我们说我有自定义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更新操作,因此我必须从JavaFX应用程序线程调用Runnable

实质上,这意味着当我想要运行它时,我必须在Platform.runLaterMyTimerTask)上调用Runnable

但是因为我没有明确地调用run()任务,因为我通过Timer.schedule将它放在TaskQueue上,我不得不求助于将MyTimerTask改为类似这样:

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

这感觉就像是一种非常粗暴的方式。

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

1 个答案:

答案 0 :(得分:1)

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

查看课程Timeline

[^\s]*

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