当前位置: 首页 > 知识库问答 >
问题:

关闭JavaFX阶段后如何释放内存?

茅和玉
2023-03-14

我正在创建一个JavaFX应用程序,当我单击一个按钮时,它将在newStage中打开一个表。但我的问题是,当我关闭该表的stage时,应用程序不会释放内存。JavaFX有什么问题吗?还是我得做点别的?

我尝试在该阶段结束时将所有内容设置为空,但仍然没有释放内存。

表的舞台上的关闭事件:

表视图;

舞台我的舞台;

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文件为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;
    }
}

in=Utility.Class.GetResourceStream(fXml);

我正在inputstream对象中获取sun.net.www.protocol.jar.JarurlConnection$JarurlinPutStream的对象

共有1个答案

卫博学
2023-03-14

内存管理和JavaFX没有什么特别之处。如果达到定义的内存限制,将运行GC。设置object=NULL后不运行。即使调用system.GC()也不意味着GC将运行。从Javadoc:

调用gc方法意味着Java虚拟机将努力回收未使用的对象,以便使它们当前占用的内存可用于快速重用。

例如,要确定某个地方是否存在内存泄漏,可以使用VisualVM查看应用程序是否(以及为什么)内存不足。

 类似资料:
  • 问题内容: 当我使用WebEngine创建播放YouTube视频的新舞台时,关闭它之后-Youtube继续在backgroung上播放。如果我使用“ Platform.exit”-它会关闭我的所有JavaFX App,但我只想关闭为YouTube创建的阶段。 这是我针对YouTube播放器的课程: 在“主舞台”中单击按钮后,我的YouTube播放器舞台正在创建: 问题答案: 您无法处置WebEng

  • 问题内容: 我想在关闭JavaFX应用程序之前保存文件。 这就是我在中设置处理程序的方式: 当按下按钮时,控制器将调用: 如果关闭窗口,请单击窗口边框上的红色X(正常方式),然后会收到输出消息“ ”,这是所需的行为。 但是,在调用应用程序时,它会在不调用处理程序的情况下关闭(没有输出)。 如何使控制器使用添加到的处理程序? 问题答案: 如果你看一下在生命周期中的类: 每当启动应用程序时,JavaF

  • 我想在关闭JavaFX应用程序之前保存一个文件。 这就是我在中设置处理程序的方法: 以及当按下按钮时调用的控制器: 如何使控制器使用我添加到中的处理程序?

  • 在这段代码中,我使用Apache POI库加载了一个大小为10MB的excel文件。这几乎消耗2GB内存。在遍历了所有行之后,我终于调用了close方法。然而,GC似乎并没有释放这个流和对象所占用的空间。仍然使用2GB 400MB内存。 有什么想法吗? 以下是我的代码:

  • 我正在JavaFX 2.0中制作一个应用程序。从我的主窗口开始一个带有一些设置的新窗口。调整完设置后,我想按一个像“保存更改”这样的按钮。 我想用这个按钮保存更改并关闭窗口。我所说的关闭意味着杀死它,而不是把它放在背景中或设置可见性。我读过关于方法阶段的书。关闭() http://docs.oracle.com/javafx/2.0/api/javafx/stage/Stage.html 正如您所

  • 我在JavaFX中有一个阶段,可以通过多种方式关闭,通过单击红色(X)或通过调用的按钮 无论舞台如何关闭,我都想在舞台关闭之前(或关闭时)执行一个动作。 如果我使用以下代码: 然后,当我单击(X)时调用处理程序,但当我调用<code>myStage.close()</code>时不会调用 这与这个问题讨论的问题相同(有一个关键区别):JavaFX:Stage-close-handler 不同之处在