gpt4 book ai didi

祖 parent 上的 JavaFX addEventListener 内存泄漏

转载 作者:行者123 更新时间:2023-11-30 04:09:50 25 4
gpt4 key购买 nike

为什么这里匿名内部类不会被释放,导致内存泄漏? FX 2.2.1 会出现这种情况。

anchorPane.getParent().getParent().lookup("#grandParentButton").addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent e) {
if (e.getCode() == KeyCode.ENTER) {
someButtonInsideAnchorPane.requestFocus();
e.consume();
}
}
});

为什么下面这个会被垃圾收集?

button1InsideAnchorPane.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent e) {
if (e.getCode() == KeyCode.ENTER) {
button2InsideAnchorPane.requestFocus();
e.consume();
}
}
});

最佳答案

第一个答案是错误的。确实,“内部类总是对其外部类拥有强引用”,但情况恰恰相反。实际上,只要内部类还活着,外部类就无法被收集。

实例未被收集的原因是其注册为监听器。注册器通常拥有对监听器的强引用,因此无法收集实例(不知道 FX)。

对不同行为的唯一解释是每个对象都注册到不同的组件。其中一张已收集,另一张尚未收集。不知道为什么,也许其中一个属于对话框?

关于祖 parent 上的 JavaFX addEventListener 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19900625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com