簡體   English   中英

是否有比嵌套匿名Runnable更好的在JavaFX Application線程上執行TimerTasks的方法?

[英]Is there a more elegant way of executing TimerTasks on JavaFX Application thread than nested anonymous Runnable?

假設我有一個自定義的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

本質上,這意味着我要運行RunnableMyTimerTask )時必須調用Platform.runLater

但是由於自從我通過Timer.schedule將其放在TaskQueue以來沒有顯式調用該任務的run() ,所以我不得不求助於將MyTimerTask更改為以下內容:

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

這聽起來像是一種非常粗糙的方法。

所以我想知道是否有更好的方法來做到這一點?

JavaFX具有動畫包,該動畫包還可用於定期更新UI。

看一下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線程中自動執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM