2012-07-03 4 views
0

트리 뷰어가있는 뷰가 있습니다. 트리 컨텐츠 제공자에 대한 리스너가 구현되었습니다. 일부 데이터가 변경되면 트리가 통지됩니다. 그러나 내 treeviewer를 새로 고치려고 할 때 오류 메시지가 나타나 트리가 삭제되었음을 보여줍니다. 내 상쾌한 행동의 문제와 그 나무가 처분되는 이유는 무엇입니까?트리 뷰어를 새로 고칠 때 트리가 삭제됩니다.

여기 내 코드 스 니펫.

getChildren() 
{ 
    resource.addListener(this); 
} 

public void dataChangeListener(changeddata) 
{ 
    tree.refresh(changedata,true); // Tree shows as disposed. 
} 

감사합니다, 있는 Girish

답변

3

는 UI에 대한 모든 업데이트는 UI 스레드 내에서 수행 될 필요가있다. 다음 코드를 사용하여이를 수행 할 수 있습니다. 새로 고침을 호출하기 전에 트리가 삭제되었는지 확인해야합니다.

Display.getDefault().asyncExec(new Runnable() { 
     @Override 
     public void run() { 
      if (!tree.getTree().isDisposed()) { 
       tree.refresh(changedData, true); 
      } 
     } 
    }); 
+0

안녕하세요, Nick, tree.getControl.getDisplay()를 통해 dataChangeListener 메소드에 표시하려고 할 때 위젯이 삭제되었음을 알립니다. 왜 보이고있는 이유 –

+0

Tree.dispose() 메서드에 중단 점을 지정하여 리스너가 호출되기 전에 호출되는지 확인하십시오. 나무 컨테이너를 새로 고치는 코드가 있습니까? 어쩌면 그것은 나무를 제거/재창조하고 있습니까? –

+0

안녕하세요 닉, 어떤 클래스에서 Tree.dispose() –