从后台线程更新GEF模型

时间:2009-09-15 06:47:32

标签: multithreading eclipse eclipse-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 个答案:

答案 0 :(得分: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) {
...
}