2017-03-02 1 views
0

私は既存のEclipseプラグインをe4に移植しています。非移植IViewPart内から私は、ビューの対応E4 MPartにアクセスしたいと思いますが、確実に動作するには、以下のことができませんでした:createPartControlComposite) に置か互換レイヤへのアクセス方法IViewPart(e4)MPart

EPartService partService = (EPartService) PlatformUI.getWorkbench().getService(EPartService.class); 
MPart part = partService.findPart(getSite().getId()); 

を私は時々(「アプリケーションがありませんIllegalStateExceptionを取得アクティブウィンドウ ")。

答えて

1

アクティブなウィンドウがある場合にのみ動作するため、ワークベンチからパーツサービスを使用しないでください。

代わりに、現在のウィンドウにパートサービスを使用します(アクティブではない可能性があります)。これはIViewPartで次のようにして取得できます。

EPartService partService = getSite().getService(EPartService.class); 

MPart part = partService.findPart(getSite().getId()); 
+0

これは私の必要としているようです。しかし、私はe4の内部動作をより良く理解するための迅速なフォローアップの質問を許可しています:(同じIDを持つ) 'IViewPart'の複数のインスタンスが許可されている場合、上記**保証されています** 'IViewPart' /' IViewSite'を呼び出しますか? –

+0

いいえ。セカンダリIDも使用する場合は、同じIDを持つ複数のビューパーツしか作成できません。 e4がセカンダリIDで何をするのか分かりません。 –

+0

説明をありがとう。幸いにも、私のビューの複数のコピーは許可されていないので、これは私にとって問題ではありません - 別々の "単一"ビューが存在するかもしれない複数のウィンドウが可能です。しかし、AFAICTでは、これらは別々の 'EPartService'を取得するので、' findPart'はウィンドウの正しいビューを見つけるはずです。 –

関連する問題