Java 从另一个线程更新UI(时间之后)

Java 从另一个线程更新UI(时间之后),java,javafx,Java,Javafx,我试图在一段时间后更新primaryStage。这给了我:java.lang.IllegalStateException:不在FX应用程序线程上; 我一直在寻找StackOverflow的解决方案,我发现一些人建议使用 Platform.runLater(new Runnable ...) 资料来源: 但我仍然不知道如何在一段时间后让它工作 我的代码: Timer timer = new Timer(); timer.schedule(new TimerTask() { @Overri

我试图在一段时间后更新primaryStage。这给了我:java.lang.IllegalStateException:不在FX应用程序线程上; 我一直在寻找StackOverflow的解决方案,我发现一些人建议使用

Platform.runLater(new Runnable ...)
资料来源:

但我仍然不知道如何在一段时间后让它工作

我的代码:

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        update(primaryStage);
        timer.cancel();
    }
}, 400);

这是一种方法:

Timer timer = new Timer();
timer.schedule(
    new TimerTask() {
        @Override
        public void run() {
            Platform.runLater(() -> update(primaryStage));
            timer.cancel();
        }
    }, 400
);

任何时候你想从另一个线程修改你的stage,你都需要通过Platform.runLater来完成。因为只有FX应用程序线程才允许这样做,事实上JavaFX并不是为并发线程使用而设计的,以防止难以修复的bug。

这是一种方法:

Timer timer = new Timer();
timer.schedule(
    new TimerTask() {
        @Override
        public void run() {
            Platform.runLater(() -> update(primaryStage));
            timer.cancel();
        }
    }, 400
);

任何时候你想从另一个线程修改你的stage,你都需要通过Platform.runLater来完成,因为只有FX应用程序线程才允许这样做,事实上JavaFX并没有被设计为被并发线程用来防止难以修复的bug。

另一个解决方案是使用PauseTransition。好处是,您不必使用Platform.runLater


另一种解决方案是使用暂停转换。好处是,您不必使用Platform.runLater