我在JavaFX中创建了具有很多控制器和场景的应用程序。
当我启动MainApp.class时,它将使用startPage.fxml中的Scene创建Stage primaryStage。 有2个按钮可以选择打开firstWindow或secondWindow。
我有2种不同的方式打开Windows 第一个,当我打开firstWindow时,我从startPage返回到MainApp并初始化firstWindow。在MainApp.class中看起来是
public void initFirstWindow() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource(fxmlFirstWindow));
rootLayout = (BorderPane) loader.load();
firstWindow controller = loader.getController();
Scene scene = new Scene(rootLayout);
primaryStage.setScene(scene);
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
在FirstWindow.class
@FXML
private BorderPane root;
public Controller controller;
...
第二种方式,当我按下按钮时,我可以从startPage启动secondWindow
private MainApp main;
private BorderPane rootLayout;
private Stage childrenStage;
@FXML
public void btnSecondWindowOpen(ActionEvent actionEvent) {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource(fxmlSecondWindow));
rootLayout = (BorderPane) loader.load();
SecondWindow controller = loader.getController();
Scene scene = new Scene(rootLayout);
childrenStage = main.getStage();
childrenStage.setScene(scene);
childrenStage.show();
}
问题是哪种方法更好,在我启动第一个或第二个Window时是否有内存泄漏?
我写的时候,有很多fxml在第一个/第二个按钮之后打开,所以我需要知道。