1

EMF データモデルがあり、それをフレームワーク「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: ランナブルの実行に失敗しました (java.lang.IllegalStateException: 書き込みトランザクションなしでリソース セットを変更できません)

原因: java.lang.IllegalStateException: org.eclipse.emf.transaction.impl.TransactionChangeRecorder.assertWriting で書き込みトランザクションなしでリソース セットを変更できません

よろしく、ジュリアン

4

1 に答える 1

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);
   }
});

お役に立てれば

于 2013-07-25T09:06:08.233 に答える