RCP e4隐藏部分

时间:2017-08-01 08:19:16

标签: java eclipse-rcp e4

我实现了e4 RCP应用程序,我想为特殊用户隐藏部件。

在e3中我知道我可以通过实现IPerspectiveFactory的透视类来做到这一点。

我目前的解决方案是:

@PostConstruct
private void init(EPartService partService) {
    MPart part = partService.findPart("part.id.activity");
    partService.hidePart(part, true);
}

我在part类中执行此操作,当我运行我的应用程序时,我得到了这个注入:

  

!ENTRY org.eclipse.e4.ui.workbench 4 0 2017-08-01 09:08:06.139   !MESSAGE无法从包'135'创建类'application.parts.activityPart.ActivityPart'   !堆栈0   org.eclipse.e4.core.di.InjectionException:无法处理“ActivityPart #createComposite()”:没有找到参数“Composite”的实际值。   at org.eclipse.e4.core.internal.di.InjectorImpl.reportUnresolvedArgument(InjectorImpl.java:476)   at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:987)   在org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:124)   at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:399)   在org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:318)   at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)   at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:105)   at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74)   at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:56)   在org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129)   在org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:997)   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:666)   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772)   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access $ 0(PartRenderingEngine.java:743)   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine $ 2.run(PartRenderingEngine.java:737)   在org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)   在org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721)   at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1289)   at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda $ 0(LazyStackRenderer.java:68)   在org.eclipse.e4.ui.services.internal.events.UIEventHandler $ 1.run(UIEventHandler.java:40)   在org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:233)   在org.eclipse.swt.widgets.Display.syncExec(Display.java:4889)   ...

1 个答案:

答案 0 :(得分:1)

请勿在部件初始化期间尝试隐藏零件。

如果您知道在应用程序启动期间您不想显示某个部件,则可以关闭其“要呈现的”部分。在你的LifeCycle课程中标记。

例如:

@ProcessAdditions
public void processAdditions(MApplication app, EModelService modelService)
{
  MUIElement el = modelService.find("part.id.activity", app);
  if (el != null) {
    el.setToBeRendered(false);
  }
}