我有一个主要课程
public class Main {
public static void main(String[] args) {
Application.launch(View.class);
View view = new View();
Platform.runLater(() -> view.changeTitle());
}
}
和视图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线程调用Platform.runLater()(例如,在start()中),一切正常。
答案 0 :(得分:1)
首先,main(String)
上阻止了Application.launch(Class)
。
来自Oracle Javadocs:
在应用程序退出之前,通过调用Platform.exit或所有应用程序窗口都已关闭,启动方法不会返回。
其次,您在第二行创建了一个新的View
实例。这与应用程序创建的实例不同,因此即使该代码在退出之前可以访问,您的Platform.runLater
也不会影响已启动的应用程序。