2017-03-02 21 views
0

我正在将现有的Eclipse插件移植到e4。从非移植IViewPart内,我想访问视图的相应E4 MPart,但不能得到以下能可靠地工作:如何访问兼容层IViewPart的(e4)MPart

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

摆在createPartControlComposite) 我有时会收到一个IllegalStateException(“应用程序没有一个活动窗口“)。

回答

1

避免使用工作台中的零件服务,因为这只有在存在活动窗口时才起作用。

改为使用当前窗口的零件服务(可能不是活动的)。你可以在IViewPart中使用:

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

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

这看起来像我需要的东西。但请允许我快速跟进问题,以更好地理解e4的内部工作方式:如果允许“IViewPart”(具有相同ID)的多个实例,则上面**保证**找到对应于调用'IViewPart' /'IViewSite'? –

+0

不可以。如果您还使用辅助ID,则只能使用相同标识的多个视图部件。我不确定e4是如何处理辅助ID的。 –

+0

感谢您的澄清。幸运的是,我的视图的多个副本是不允许的,所以这对我来说不是问题 - 即使可能存在单独的“单个”视图的多个窗口也是如此。但是AFAICT,这些也得到了单独的'EPartService',所以'findPart'应该为窗口找到正确的视图。 –