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

Gau*_*rav 5 java eclipse eclipse-plugin eclipse-rcp

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

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

Eri*_*ark 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

在plugin.xml 中,向扩展org.eclipse.e4.workbench.model点添加一个指向刚刚创建的.e4xmi 模型片段的片段,并将“apply”设置为always。

最后,在同一个扩展点上,添加一个处理器并将其指向上面的类。beforefragment过去trueapply过去都是always

e4xmi 文件仍然用于定义菜单,但在代码中,由于上面定义的处理器,无论工作区中保存了何种持久状态,菜单都被迫显示。在已经将菜单分割成一个单独的模型片段之后,我最终得到了这个解决方案,所以我不确定解决方案的这一部分是否确实需要,但最肯定的是定义处理器。