我试图在一段时间后更新primaryStage。这给了我:java.lang.IllegalStateException: Not on FX application thread;
我一直在寻找StackOverflow的解决方案,我发现有些人建议使用
Platform.runLater(new Runnable ...)
来源:https://stackoverflow.com/a/17851019/5314214
但是我仍然无法弄清楚如何在一段时间后使其工作。
我的代码:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
update(primaryStage);
timer.cancel();
}
}, 400);
答案 0 :(得分:3)
这是做到这一点的方法:
Timer timer = new Timer();
timer.schedule(
new TimerTask() {
@Override
public void run() {
Platform.runLater(() -> update(primaryStage));
timer.cancel();
}
}, 400
);
任何时候你想要从另一个线程修改你的舞台,你需要通过Platform.runLater
来修改你的舞台,因为只有FX application thread
被允许这样做,确实JavaFX
没有设计成并发线程使用它来防止难以修复的错误。
答案 1 :(得分:2)
另一种解决方案是使用PauseTransition
。好处是您不必使用Platform.runLater()
PauseTransition pauseTransition = new PauseTransition(Duration.millis(400));
pauseTransition.setOnFinished(e -> updateStage());
pauseTransition.playFromStart();