[英]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
。
本質上,這意味着我要運行Runnable
( MyTimerTask
)時必須調用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.