在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线程中自动执行。这与以下内容非常相似(几乎是重复的):