JavaFx
ボタンをクリックすると new でテーブルが開くアプリケーションを作成していますstage
。しかし、私の問題は、stage
そのテーブルを閉じると、アプリケーションによってメモリが解放されないことです。javaFXに問題はありますか?または私は何か他のことをしなければなりませんか?
そのステージの終了時にすべてを null に設定しようとしましたが、それでもメモリが解放されません。
テーブル のステージでのクロージング イベント:
TableView テーブルビュー;
ステージ 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 = Utility.class.getResourceAsStream(fXml);
入力ストリームオブジェクトでsun.net.www.protocol.jar.JarURLConnection$JarURLInputStreamのオブジェクトを取得しています