【发布时间】:2018-08-22 17:37:09
【问题描述】:
给定:
BorderPane root = new BorderPane();
GridPane block = new GridPane();
block.addRow(0, new Text("HELLO"));
ScheduledExecutorService someScheduler = Executors.newScheduledThreadPool(4);
someScheduler.schedule(() -> {
System.out.println("IN");
block.addRow(1, new Text("WORLD"));
System.out.println("OUT");
}, 2, TimeUnit.SECONDS);
root.setCenter(block);
Scene scene = new Scene(root, 1280, 720);
primaryStage.setScene(scene);
primaryStage.show();
GridPane 不应该在 2 秒后添加一行吗?输出到达 IN 但从未到达 OUT。有人可以向我解释这种行为吗?
【问题讨论】:
-
block.addRow很可能会引发异常,因为您正试图从后台线程更新 UI。您只能从 JavaFX 应用程序线程 更新 UI:请参阅Platform.runLater。但是,如果PauseTransition或Timeline就足够了,请不要为此使用线程池。 -
@Slaw 是的,你是对的!我试图捕捉异常并得到:“java.lang.IllegalStateException:不在 FX 应用程序线程上;currentThread = pool-2-thread-1”。