【问题标题】:Java JTree: clear selection state (reset references)Java JTree:清除选择状态(重置引用)
【发布时间】:2012-05-17 20:07:21
【问题描述】:

在我的 java 应用程序中,当我关闭一个打开的模型时,一些对象没有被垃圾收集。我正在使用 Eclipse MAT 检测到 GC 根目录的路径,并确保在模型关闭后将引用设置为 null,以便 GC 可以清理内存。

我无法清除以下引用(Eclipse MAT 输出的摘录)。

myTree javax.swing.JTree uiTreeExpansionListener、keyListener、focusListener javax.swing.plaf.basic.BasicTreeUI$Handler pressedPath javax.swing.tree.TreePath lastPathComponent myClass

如果 myTree (JTree) 没有重置/清除侦听器中的值,则在 lastPathComponent 中维护对 myClass 而且它不会被垃圾回收。

知道如何告诉树不要维护引用吗?

编辑:我已经把下面的方法清除引用,但它并没有清除所有(上面提到的)引用。

公共无效清除(){ 取消编辑(); 全部收缩(); 清空选项(); clearToggledPaths(); 重置键盘操作(); fireTreeCollapsed(null); }

【问题讨论】:

  • 关闭模型基本上意味着,我将一堆引用设置为空。我检查这些参考以查看是否加载了模型。如果为 null,那么我不会在我的应用程序 (GUI) 中显示模型数据。

标签: java swing garbage-collection jtree


【解决方案1】:

我找到了一种解决方法(不是干净优雅的解决方案),至少可以解决我的问题。以下代码完成了释放所有(已知)引用的工作。

公共无效清除(){ 取消编辑(); 清空选项(); clearToggledPaths(); 重置键盘操作(); 更新UI(); }

由于我需要在关闭模型时执行上述方法,因此性能可能不会受到太大影响。但如果可能的话,我更喜欢更优雅(并且概念上正确)的解决方案。

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 2019-05-28
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多