Java JTree:清除选择状态(重置引用)

时间:2012-05-17 20:07:21

标签: java swing garbage-collection jtree

在我的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 <的对象维护一个引用/ strong>并且它不是垃圾收集。

有关如何告诉树不维护引用的任何想法吗?

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

    public void clear() {
        cancelEditing();
        collapseAll();
        clearSelection();
        clearToggledPaths();
        resetKeyboardActions();
        fireTreeCollapsed(null);
    }

1 个答案:

答案 0 :(得分:0)

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

public void clear() {
   cancelEditing();
   clearSelection();
   clearToggledPaths();
   resetKeyboardActions();
   updateUI();
}

由于我需要在关闭模型时执行上述方法,因此性能可能不会太大。但如果可能的话,我宁愿选择更优雅(也是概念上正确的)解决方案。