JavaFX定期后台任务

问题描述

您可以使用时间表来解决此问题:

Timeline fiveSecondsWonder = new Timeline(
                 new KeyFrame(Duration.seconds(5), 
                 new EventHandler<ActionEvent>() {

    @Override
    public void handle(ActionEvent event) {
        System.out.println("this is called every 5 seconds on UI thread");
    }
}));
fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE);
fiveSecondsWonder.play();

对于后台进程(对UI不起任何作用),您可以使用old good java.util.Timer:

new Timer().schedule(
    new TimerTask() {

        @Override
        public void run() {
            System.out.println("ping");
        }
    }, 0, 5000);

解决方法

我尝试定期在JavaFX应用程序后台线程中运行,这会修改一些GUI属性。

我想我知道如何使用Task和Service类,javafx.concurrent并且不知道如何在不使用Thread#sleep()方法的情况下运行此类定期任务。这将是很好,如果我可以使用一些Executor从Executors编造的方法(Executors.newSingleThreadScheduledExecutor()

我尝试Runnable每5秒运行一次,这会重新启动,javafx.concurrent.Service但立即挂起,service.restart甚至service.getState()被调用。

所以最后我使用Executors.newSingleThreadScheduledExecutor(),它Runnable每5秒触发一次,Runnable并Runnable使用以下命令运行另一个:

Platform.runLater(new Runnable() {
 //here i can modify GUI properties
}

看起来很讨厌:(是否有更好的方法使用Task或Service类来执行此操作?

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”