Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AbstractContributionFactory在E4中不起作用_Java_Eclipse Plugin_E4 - Fatal编程技术网

Java AbstractContributionFactory在E4中不起作用

Java AbstractContributionFactory在E4中不起作用,java,eclipse-plugin,e4,Java,Eclipse Plugin,E4,我们有这样的AbstractContributionFactorys: final AbstractContributionFactory contributions = new AbstractContributionFactory("org.acme.mainMenu", null) { @Override public void createContributionItems(final IServiceLocator serviceLocator,

我们有这样的
AbstractContributionFactory
s:

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);
这段代码在Eclipse3.x中工作得很好,但在E4中停止了工作。因此,在搜索bug时,我们在E4框架中发现了大量未注释的代码,仅在
WorkbenchmentUservice.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);
    // }
    // }
///好,现在更新使用此uri的所有管理器
//对于(地图条目:
//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());
//经理更新(正确);
// }
// }
根据评论,很多人都有同样的问题


有人找到了解决这个错误的方法吗?

我还想通过编程将一些菜单项添加到RCP应用程序的主菜单中,但被这个错误发现了

我发现您可以通过扩展
ExtensionContributionFactory
类(该类还有一个
createContributionItems()
方法),而不是使用
WorkbenchNameUserVice.addContributionFactory(…)
方法来添加contibution项,然后使用
org.eclipse.ui.menus
扩展点将其添加为新的
menuContribution


我在Vogella的文章中找到了这个解决方案。

我还想通过编程将一些菜单项添加到RCP应用程序的主菜单中,但被这个bug发现了

我发现您可以通过扩展
ExtensionContributionFactory
类(该类还有一个
createContributionItems()
方法),而不是使用
WorkbenchNameUserVice.addContributionFactory(…)
方法来添加contibution项,然后使用
org.eclipse.ui.menus
扩展点将其添加为新的
menuContribution

我在Vogella的文章中找到了这个解决方案