Tôi đang tạo một ứng dụng JavaFx
trong đó khi tôi nhấp vào một nút thì nó sẽ mở một bảng mới stage
mới. Nhưng vấn đề của tôi là khi tôi đóng stage
của bảng đó, bộ nhớ không được ứng dụng miễn phí. Có gì sai với javaFX không? hoặc tôi phải làm gì khác?Làm thế nào để giải phóng bộ nhớ sau khi đóng Giai đoạn JavaFX?
Tôi đã cố gắng đặt mọi thứ không có giá trị tại thời điểm đóng của giai đoạn đó nhưng bộ nhớ vẫn không nhận được miễn phí.
Bế mạc sự kiện trên sân khấu của bảng:
TableView tableView;
Giai đoạn 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();
}
});
Tôi đã tạo ra một phương pháp gọi là replaceScene để tải cảnh sử dụng fxml
tập cho sân khấu. Nó sẽ trả về controller của nó và thiết lập scene thành Stage.
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;
}
}
tôi đầu tiên nhận được StreamObject (java.io.InputStream) cho file fxml và sau đó vượt qua streamObject này để FxmlLoader để tải trang,
trong = Utility.class.getResourceAsStream (fXml) ;
Tôi nhận đối tượng của sun.net.www.protocol.jar.JarURLConnection $ JarURLInputStream trong trong inputstream đối tượng
Tôi đã cập nhật câu hỏi. Có thể sẽ giúp bạn. – Ronak
@Ronak cập nhật của bạn liên quan đến câu hỏi của bạn như thế nào? – Kai
Tôi có nghĩa là để nói cách tôi tải cảnh bằng cách sử dụng inputstream sẽ không giải phóng bộ nhớ. – Ronak