【发布时间】:2015-01-21 15:30:40
【问题描述】:
我想知道动态创建的阶段和控制器的生命周期(不是扩展应用程序的主窗口),或者换句话说,从另一个窗口产生的任何子窗口。我担心任何内存泄漏,我只想确保我正在构建内存/资源高效的 GUI 应用程序。这是一个示例代码:
private void addNewAsset(ActionEvent event) {
AssetController assetController = new AssetController();
FXMLLoader loader = new FXMLLoader(getClass().getResource("assetchooser.fxml"));
loader.setController(assetController);
Stage assetChooserStage = new Stage();
assetChooserStage.initModality(Modality.WINDOW_MODAL);
assetChooserStage.initOwner(listviewAssets.getScene().getWindow());
assetChooserStage.setTitle("Choose Asset(s)");
try {
assetChooserStage.setScene(new Scene((Parent)loader.load()));
} catch (IOException e) {
e.printStackTrace();
}
assetChooserStage.show();
assetChooserStage.setOnCloseRequest((windowEvent)->{
//DO STUFF: Get any data
List<AssetChosenData> listAssets = assetController.getListAssetChosen();
System.out.println("CLOSING");}
);
}
如您所见,addNewAsset() 方法是在用户单击某个按钮时执行的。该方法使用 FXMLLoader 和控制器生成一个新阶段。当这个阶段关闭时(setOnCloseRequest),我捕获了我想要的数据。之后会发生什么?控制器(AssetController)和Stage(assetChooserStage),以及它们使用的所有Controls和数据,是否会被设置为null,稍后GC来处理它们?
如果你不知道具体细节,也许你可以给我指出一个处理这个主题的官方 Java/Oracle 文档。
谢谢。
【问题讨论】:
标签: java performance memory memory-leaks javafx