배경 스레드에서 GEF 모델 업데이트
-
07-07-2019 - |
문제
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();
}
}
});
해결책
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) {
...
}
제휴하지 않습니다 StackOverflow