使用JavaFX和FXML,我试图显示一个包含一些基本信息的屏幕,然后当HTTP调用返回时,更新该屏幕。实际情况是,在调用返回之前,屏幕根本不显示。下面是对该问题的最小情况测试,其中有一个延迟,用于模拟HTTP调用。
我希望屏幕显示,第一个标签更新,10秒的延迟,然后第二个标签更新。相反,屏幕直到延迟结束后才显示,我希望我忽略了一些简单的事情,而不是必须创建多个线程来做这么简单的事情。下面是足够的代码,我认为任何人都可以回答这个问题。我可以包括更多的代码,如果需要的话。
@Override
public void start(Stage stage) throws IOException {
this.stage = stage;
FXMLLoader loader = new FXMLLoader();
loader.setLocation(App.class.getResource("primary.fxml"));
anchroot = (AnchorPane) loader.load();
// Show the scene containing the root layout.
Scene scene = new Scene(anchroot);
stage.setScene(scene);
// Give the controller access to the main app.
PrimaryController controller = loader.getController();
controller.setMainApp(this);
stage.show();
//change the first label
controller.setLabel0();
//timer to simulate IO
try {
TimeUnit.SECONDS.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
//try to change the second label 10 sec later
controller.setLabel1();
}
1条答案
按热度按时间bq3bfh9z1#
调用
TimeUnit.SECONDS.sleep(10);
将使JavaFX
线程阻塞10秒。在这种情况下,您将无法看到GUI线程中的任何更改,直到休眠期结束。在JavaFX中,您可以使用Timeline
在特定时间段后进行更新: