我们AbstractContributionFactory
就像这样:
final AbstractContributionFactory contributions = new AbstractContributionFactory("org.acme.mainMenu", null) {
@Override
public void createContributionItems(final IServiceLocator serviceLocator,
final IContributionRoot contributionRoot) {
String subMenuId ="org.acme.subMenu";
final MenuManager subMenu = new MenuManager("Sub menu", subMenuId );
contributionRoot.addContributionItem(subMenu, AlwaysEnabledExpression.INSTANCE);
menuService.addContributionFactory(new AbstractContributionFactory("menu:" + subMenuId, null) {
@Override
public void createContributionItems(final IServiceLocator serviceLocator1,
final IContributionRoot additions) {
additions.addContributionItem(new ActionContributionItem(new Action("Sub action") {
}), AlwaysEnabledExpression.INSTANCE);
}
});
}
};
menuService.addContributionFactory(contributions);
此代码在Eclipse 3.x中运行良好,但在E4中停止工作。因此,在搜索错误时,我们在E4框架中发现了许多未注释的代码,仅在WorkbenchMenuService.addContributionFactory(...)
中就有两个块。我假设产生的错误是:
// // OK, now update any managers that use this uri
// for (Map.Entry<ContributionManager, MenuLocationURI> entry :
// managers.entrySet()) {
// MenuLocationURI mgrURI = entry.getValue();
// if (mgrURI.getScheme().equals(location.getScheme())
// && mgrURI.getPath().equals(location.getPath())) {
// ContributionManager mgr = entry.getKey();
// populateContributionManager(mgr, mgrURI.toString());
// mgr.update(true);
// }
// }
根据the associated bug的评论,很多人都有同样的问题。
有没有人找到错误的解决方法?
答案 0 :(得分:0)
我还想以编程方式将一些菜单项添加到RCP应用程序的主菜单中,并且被这个错误搞定了。
我没有使用WorkbenchMenuService.addContributionFactory(...)
方法,而是使用扩展ExtensionContributionFactory
类(也有createContributionItems()
方法)添加contibution项,然后使用org.eclipse.ui.menus
个扩展点为新menuContribution
。
我在Vogella的blog中找到了这个解决方案。