菜单栏在恢复状态下不显示在eclipse e4中

时间:2014-11-22 04:25:24

标签: java eclipse eclipse-plugin eclipse-rcp

我正在使用带有兼容性层的Eclipse 4.4.1创建一个RCP应用程序(从3.x迁移到4.x)。我在应用程序模型中定义了菜单。首次启动应用程序时菜单显示正常,但重新启动应用程序完全隐藏菜单栏并仅显示工具栏。

为什么在恢复RCP应用程序时可能没有菜单显示?

1 个答案:

答案 0 :(得分:1)

这听起来像我最近刚遇到的这个错误:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=388808

就个人而言,错误报告中的解决方法对我来说并不完全有用(但可能对你而言)。对我有用的是基于Karl Puperze的最后一篇文章(稍作修改):

https://www.eclipse.org/forums/index.php/t/446433/

public class ForceMainMenuProcessor 
{
    @Execute
    public void execute(@Optional MApplication application, @Optional EModelService modelService) 
    {
        MTrimmedWindow window = (MTrimmedWindow) 
            modelService.find("<id of your main trimmed window>", application);

        if (window == null || window.getMainMenu() != null) 
            { return; }

        final MMenu mainMenu = modelService.createModelElement(MMenu.class);
        mainMenu.setElementId("org.eclipse.ui.main.menu");

        window.setMainMenu(mainMenu);
    }
}

由此,最后的步骤是确保我在主e4xmi文件中定义了(没有内容)菜单,该菜单具有org.eclipse.ui.main.menu id,然后定义了包含菜单内容的片段。

向plugin.xml添加一个片段,该片段指向刚刚创建的.e4xmi模型片段并设置&#39; apply&#39;永远。

最后,在同一个扩展点上,添加了一个处理器并将其指向上面的类。 org.eclipse.e4.workbench.modelbeforefragmenttrueapply

e4xmi文件仍然用于定义菜单,但在代码中,由于上面定义的处理器,无论工作区中保存了什么持久状态,都强制显示菜单。在将菜单拆分为单独的模型片段之后,我最终得到了这个解决方案,因此我不确定解决方案的那部分是否是必需的,但大多数情况下定义处理器是。