2012-05-17 2 views
0

Java 응용 프로그램에서 열린 모델을 닫으면 일부 객체가 가비지 수집되지 않습니다. Eclipse MAT를 사용하여 GC 루트에 대한 경로를 검색하고 모델 닫기 후에 참조가 null로 설정되어 GC가 메모리를 정리할 수 있는지 확인합니다.Java JTree : 선택 상태 지우기

다음 참조 (Eclipse MAT 출력에서 ​​발췌 한 내용)를 지울 수 없습니다.

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

으로 myTree (JTree가)는 청취자의 값을 클리어/리셋하지 않는 경우, 기준은 myClass가의 목적에 lastPathComponent 유지이며 가비지 수집이 아니다.

트리에 참조를 유지하지 말라고하는 방법에 대한 아이디어가 있습니까?

편집 : 참조를 지우려면 다음 방법을 사용했지만 모든 참조 (위에서 언급 한)를 지우지는 않습니다.

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

모델을 어떻게 닫습니까? – dacwe

+0

모델을 닫으면 기본적으로 널 참조 집합이 null로 설정됩니다. 모델이로드되었는지 확인하려면이 참조를 확인하십시오. null 인 경우, 모델 데이터를 어플리케이션 (GUI)에 표시하지 않습니다. –

답변

0

적어도 내 문제를 해결할 수있는 임시 해결책을 찾았습니다. 다음 코드는 모든 (알려진) 참조를 해제하는 작업을 수행합니다.

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

모델을 닫을 때 위의 방법을 실행해야하므로 성능이 많이 저하되지 않을 수 있습니다. 그러나 가능한 한보다 세련된 (그리고 개념적으로 올바른) 솔루션을 선호합니다.