gpt4 book ai didi

JavaFX 从另一个线程更新 UI

转载 作者:行者123 更新时间:2023-12-01 10:01:03 26 4
gpt4 key购买 nike

我有一个主课

    public class Main {
public static void main(String[] args) {
Application.launch(View.class);
View view = new View();
Platform.runLater(() -> view.changeTitle());
}
}

和一个 View JavaFX 类

    public class View extends Application {

Stage primaryStage;

public View() {

}

@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
this.primaryStage = primaryStage;
primaryStage.show();
}

public void changeTitle() {
primaryStage.setTitle("YEA!");
}
}

我希望主类在 JavaFX 线程中执行某些操作,但我的代码不起作用。在文档中说我可以从任何我想要的线程调用 Platform.runLater() 。如果我从 JavaFX 线程(例如在 start() 中)调用 Platform.runLater(),则一切正常。

最佳答案

首先,main(String)Application.launch(Class) 上被阻止。

来自 Oracle Javadocs:

The launch method does not return until the application has exited, either via a call to Platform.exit or all of the application windows have been closed.

其次,您将在第二行创建一个新的 View 实例。这不会是创建的同一实例应用程序,因此您的 Platform.runLater 不会影响启动的应用程序,即使该代码在退出之前可以访问。

关于JavaFX 从另一个线程更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36806308/

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