Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaFX应用程序线程上执行TimerTask是否有比嵌套匿名Runnable更优雅的方法?_Java_Timer_Javafx_Timertask_Anonymous Inner Class - Fatal编程技术网

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

在JavaFX应用程序线程上执行TimerTask是否有比嵌套匿名Runnable更优雅的方法?,java,timer,javafx,timertask,anonymous-inner-class,Java,Timer,Javafx,Timertask,Anonymous Inner Class,比如说,我有一个做事情的习惯 因此,通常情况下,计时器任务会如下所示: public class MyTimerTask extends TimerTask { @Override public void run() { // Do work... } } public class MyTimerTask extends TimerTask { @Override public void run() { Platform.

比如说,我有一个做事情的习惯

因此,通常情况下,计时器任务会如下所示:

public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        // Do work...
    }
}
public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        Platform.runLater(
            new Runnable() {
                public void run() {
                    //Do work...
                }
            }
        );
    }
}
我通过a计划了一个连续的重复周期,每10秒执行一次

Timer myTimer = new Timer();
MyTimerTask myTask = new MyTimerTask();
myTimer.schedule(myTask,0,10000);
在正常情况下,这可以正常工作,但是由于我在这个任务中执行了一些GUI更新操作,所以我必须从JavaFX应用程序线程调用

本质上,这意味着当我想要运行(
MyTimerTask
)时,我必须调用它

但是,由于我没有显式地调用任务上的
run()
,因为我通过将其放在任务队列上,因此我必须将
MyTimerTask
更改为如下内容:

public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        // Do work...
    }
}
public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        Platform.runLater(
            new Runnable() {
                public void run() {
                    //Do work...
                }
            }
        );
    }
}
这感觉像是一种非常粗糙的方式


所以我想知道是否有更好的方法来实现这一点?JavaFX有动画包,也可以用于定期更新UI

看一看这门课:

Timeline Timeline=新的时间线(新的关键帧)(持续时间。秒(10),
新的EventHandler(){
公共无效句柄(ActionEvent ae){
//做事
}
}
));
timeline.setCycleCount(Animation.unfinite);
timeline.play();
时间线将在JavaFX线程中自动执行。

这与以下内容非常相似(几乎是重复的):