【问题标题】:JavaFX 2.0 memory leak on creating multiple scenesJavaFX 2.0 创建多个场景时的内存泄漏
【发布时间】:2012-04-11 16:29:34
【问题描述】:

我创建了一个导致内存泄漏的示例应用程序。

问题是我需要“重新加载”场景。如果我有两个场景(Bar 和 Foo),每个场景都有一个按钮(ButtonBar 和 ButtonFoo),则这些按钮会更改当前场景并创建一个新场景。 如果我一直点击 ButtonBar 和 ButtonFoo 5 分钟(或更短),那么这个简单程序的内存消耗会越来越高。

Bar.java

public class Bar implements Initializable {

@FXML
private Label label;

@FXML
private void toFoo(ActionEvent event) {
    try {
        Button button = (Button) event.getSource();
        Parent root = FXMLLoader.load(getClass().getResource("Foo.fxml"));
        Stage currentStage = (Stage) button.getScene().getWindow();
        currentStage.setScene(new Scene(root));
    } catch (IOException ex) {
        Logger.getLogger(Bar.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}    
}

Foo.java 也是一样的改变 de fxml 加载。

fxml 只包含一个按钮:

<Button id="buttonBar" layoutX="126" layoutY="90" text="Bar!" onAction="#toFoo" fx:id="buttonBar" />

真的存在内存泄漏问题吗?有谁知道另一种方法来做到这一点?我希望这个应用程序保持活力并永远进行更改,就像一项服务一样。 谢谢

【问题讨论】:

    标签: memory-leaks garbage-collection javafx


    【解决方案1】:

    我也有类似的问题。

    当我在场景中移动鼠标时。内存使用量增加并且从不下降。

    我相信这与鼠标事件有关。

    祝你好运!

    【讨论】:

    • 是的。与 Scene Builder 的任何交互都会以指数方式增加内存……这是从 Java 网站下载的最新版本。 WTF在这里进行吗?这是您发帖后的 2 年...
    【解决方案2】:

    我不确定内存泄漏,但出于性能原因,我会避免重复加载资源。

    我所做的是将根 Parent 保存在变量中并将其添加到场景中,或者在我的情况下根据需要添加到另一个场景的特定部分,通过控制器类的静态方法更新值。

    我有几个这样的预加载场景,每次用户从列表中选择某些值时,它们都会更新更大场景的一部分。

    【讨论】:

      【解决方案3】:

      我建议你试试 FX8。那里已经对内存泄漏进行了大量修复。

      如果您无法更新到最新版本的 JavaFX,我建议您不要在 FXML 中使用onAction="#toFoo"

      相反,声明一个事件处理程序并调用以下代码:buttonBar.addEventHandler(MouseEvent.MOUSE_CLICKED, declaredEventHandler);

      在退出当前屏幕之前释放事件处理程序:buttonBar.removeEventHandler(declaredEventHandler);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-16
        • 1970-01-01
        • 2019-06-20
        • 2015-07-01
        相关资源
        最近更新 更多