gpt4 book ai didi

java - 为什么我的JavaFX有这个程序流程问题?

转载 作者:行者123 更新时间:2023-12-02 01:06:58 25 4
gpt4 key购买 nike

使用 JavaFX 和 FXML,我尝试显示一个包含一些基本信息的屏幕,然后当 HTTP 调用返回时,更新该屏幕。相反,在调用返回之前,屏幕根本不会显示。下面是该问题的最小案例测试,其中延迟旨在模拟 HTTP 调用。

我希望显示屏幕,更新第一个标签,延迟十秒,然后更新第二个标签。相反,直到延迟完成后才会显示屏幕,无论我将延迟放在哪里,都会发生这种情况。我希望我忽略了一些简单的事情,而不是必须创建多个线程来完成如此简单的事情。我认为下面的代码足以让任何人能够回答这个问题。如果需要,我可以添加更多代码。

@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();

}

最佳答案

调用 TimeUnit.SECONDS.sleep(10); 将使 JavaFX 线程阻塞 10 秒。在这种情况下,在 sleep 周期结束之前,您将无法看到 GUI 线程中的任何更改。在 JavaFX 中,您可以使用 Timeline 在特定时间段后进行更新:

controller.setLabel0();
new Timeline(new KeyFrame(Duration.seconds(10), event -> controller.setLabel1())).play();

关于java - 为什么我的JavaFX有这个程序流程问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59889114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com