我有一个EMF Datamodel并用框架“Graphiti”表示它。 如果数据模型发生变化,我的UpdateFeature中的方法“updateNeeded()”是随机调用的。因此我有一个倾听者。如果发生更改,此侦听器将调用方法“update()”。 在方法更新中,我可以定义数据模型和图表之间的差异。但是如果我想在图表中添加或更改任何内容,则会抛出异常。
有谁知道如何自动更新图表?
这是我在侦听器中的示例代码:
UpdateContext updateContext = new UpdateContext(getDiagram().getChildren().get(0).getGraphicsAlgorithm().getPictogramElement());
IUpdateFeature updateFeature = getFeatureProvider().getUpdateFeature(updateContext);
updateFeature.update(updateContext);
和例外:
!ENTRY org.eclipse.ui 4 0 2013-07-11 13:36:43.886 !MESSAGE未处理的事件循环异常 !STACK 0
org.eclipse.swt.SWTException:无法执行runnable(java.lang.IllegalStateException:无法在没有写入事务的情况下修改资源集)
引起:java.lang.IllegalStateException:无法在没有写入事务的情况下修改资源集 在org.eclipse.emf.transaction.impl.TransactionChangeRecorder.assertWriting
问候,Juliane
答案 0 :(得分:2)
在Graphiti中,您需要在EMF事务中对图表执行更改。 您可以通过执行以下代码来执行此操作:
TransactionalEditingDomain domain = TransactionUtils.getEditingDomain(diagram);
domain.getCommandStack().execute(new RecordingCommand(domain) {
public void doExecute() {
UpdateContext updateContext = new UpdateContext(getDiagram().getChildren().get(0).getGraphicsAlgorithm().getPictogramElement());
IUpdateFeature updateFeature = getFeatureProvider().getUpdateFeature(updateContext);
updateFeature.update(updateContext);
}
});
希望这有帮助