1

Eclipse、EMF、および GEF を使用して実装しているビジュアル プログラミング言語のインタープリターを開発しています。現在、ダイアグラムのインタープリターを作成しています。

ダイアグラムを実行するために、ランチャー構成を実装することにしました。構成が実行されると、アクティブなエディターから EMF モデルを読み取って解釈したいと考えています。私が抱えている問題は、アクティブなエディターに UI スレッドからしかアクセスできないことです。長いプロセスになる可能性があるため、インタープリターを UI トレッドで実行したくありません。これは機能しますが、使用すべきではないコードです。

@Override
public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor)
        throws CoreException {
    final IWorkbench workbench = PlatformUI.getWorkbench();
    workbench.getDisplay().asyncExec(new Runnable() {
        @Override
        public void run() {
            IEditorPart activeEditor = workbench.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
            OPMGraphicalEditor editor = (OPMGraphicalEditor) activeEditor;
            OPMObjectProcessDiagram opd = editor.getOPD();
            Interpreter.INSTANCE.interpret(opd);
        }
    });
}

これを行う適切な方法があると確信していますが、見つけられませんでした。インターネットで見つけた起動構成の例では外部プログラムを使用していますが、(現在) ワークベンチの一部としてインタープリターを実装しています。

助けてくれてありがとう。

4

2 に答える 2

0

上記のコードを...getDisplay().syncExec(...)代わりに使用して、エディターへのポインターを囲んでいるオブジェクトに格納できます。

于 2012-05-22T08:38:40.320 に答える
0

エディターから直接構成を起動する場合 (右クリックして、別のユーザーとして実行..)、 を使用してILaunchShortcutそのメソッドを上書きするだけvoid launch(IEditorPart editor, String mode)で、ファイルの起動元のエディターにアクセスできます。

于 2013-01-07T08:47:55.720 に答える