Java 从另一个线程更新UI(时间之后)
我试图在一段时间后更新primaryStage。这给了我:java.lang.IllegalStateException:不在FX应用程序线程上; 我一直在寻找StackOverflow的解决方案,我发现一些人建议使用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
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