2009-09-15 130 views
0

我在嘗試更新GEF的模型,並在創建的視圖中顯示更改。目前沒有改變我提出的是反映在該視圖中,我使用下面的方法來更新模型,我想知道,如果它的正確的做法採取:從後臺線程更新GEF模型

Display.getDefault().asyncExec(new Runnable() { 
    public void run() { 
      String viewId = "beat.views.BeatView"; 

      IWorkbench workbench = PlatformUI.getWorkbench(); 

      IWorkbenchWindow mainWindow = workbench 
        .getActiveWorkbenchWindow(); 

      try { 

       BeatView view = (BeatView) mainWindow.getActivePage() 
         .showView(viewId); 

       BeatEditPart beatEditPart = (BeatEditPart)view.getGraphicalViewer().getContents(); 

       BeatModel beatModel = (BeatModel)beatEditPart.getModel(); 
       beatModel.setObjects(model); 
      } catch (PartInitException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 

回答

1

是您的EditPart的聽模型更改?

1 - 您需要註冊爲模型的偵聽器。我們使用EMF的通知機制。

public void activate() { 
    if (!isActive()) 
     ((EObject) getModel()).eAdapters().add(this); 
    super.activate(); 
} 

public void deactivate() { 
    if (isActive()) 
     ((EObject) getModel()).eAdapters().remove(this); 
    super.deactivate(); 
} 

2 - 您需要在某些事情發生變化時採取行動。

public void notifyChanged(Notification notification) { 
... 
}