2012-05-17 5 views
0

В моем приложении java, когда я закрываю открытую модель, некоторые объекты не собирают мусор. Я использую Eclipse MAT для обнаружения путей к GC root и следя за тем, чтобы ссылки были установлены на null после закрытия модели, чтобы GC мог очистить память.Java JTree: очистить состояние выбора (сбросить ссылки)

Я не могу очистить следующие ссылки (выдержка из MAT-выхода Eclipse).

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

Если myTree (JTree) не сбрасывает/очистить значение в слушателях, то ссылка поддерживается в lastPathComponent к объекту MyCLASS и это не мусор.

Любая идея о том, как сказать дереву не поддерживать ссылки?

Редактировать: Я поместил следующий метод для очистки ссылок, но он не очищает все (упомянутые выше) ссылки.

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

Как вы закрываете модель? – dacwe

+0

Закрытие модели в основном подразумевает, я установил кучу ссылок на нуль. Я проверяю эти ссылки, чтобы увидеть, загружена ли модель. Если значение null, то я не показываю данные модели в своем приложении (GUI). –

ответ

0

Я нашел обходное решение (не чистое и элегантное решение), чтобы по крайней мере позаботиться о моей проблеме. Следующий код выполняет работу по освобождению всех (известных) ссылок.

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

Поскольку мне нужно выполнить описанный выше метод, когда я закрываю модель, производительность может не сильно пострадать. Но я предпочел бы более элегантное (и концептуально правильное) решение, если это возможно.

Смежные вопросы