我正在创建一个JavaFx应用程序,当我点击一个按钮时,它将在新的stage中打开一个表格。但我的问题是,当我关闭那个表格的stage时,应用程序没有释放内存。是JavaFX有问题吗?还是我需要做些其他的事情?
我已经尝试在关闭那个stage的同时将所有内容设置为null,但仍然无法释放内存。
表格stage上的关闭事件:
TableView tableView;
Stage myStage;
我创建了一个名为replaceScene的方法,用于使用
我首先获取FXML文件的StreamObject(java.io.InputStream),然后将此streamObject传递给FxmlLoader以加载页面。
我已经尝试在关闭那个stage的同时将所有内容设置为null,但仍然无法释放内存。
表格stage上的关闭事件:
TableView tableView;
Stage myStage;
this.myStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent t) {
TableController.this.myStage.close();
tableView.getItems().clear();
tableView.getColumns().clear();
tableView = null;
TableController.this.myStage = null;
System.gc();
}
});
我创建了一个名为replaceScene的方法,用于使用
fxml
文件加载场景到舞台。它将返回其控制器并将场景设置到舞台中。 public static Initializable replaceScene(String fXml, Stage mystage) {
InputStream in = null;
try {
FXMLLoader loader = new FXMLLoader();
in = Utility.class.getResourceAsStream(fXml);
loader.setLocation(Utility.class.getResource(fXml));
loader.setBuilderFactory(new JavaFXBuilderFactory());
AnchorPane page;
try {
page = (AnchorPane) loader.load(in);
} finally {
in.close();
}
Scene scene = new Scene(page);
mystage.setScene(scene);
return loader.getController();
} catch (Exception ex) {
return null;
}
}
我首先获取FXML文件的StreamObject(java.io.InputStream),然后将此streamObject传递给FxmlLoader以加载页面。
我在 in 输入流对象中获取 sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream 对象。in = Utility.class.getResourceAsStream(fXml);