我实现了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) ...
答案 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);
}
}