Обновление модели 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