这听起来像我最近刚遇到的这个错误:
就个人而言,错误报告中的解决方法对我来说并不完全适用(但可能对你而言).对我有用的是基于Karl Puperze的最后一篇文章,(稍作修改):
public class ForceMainMenuProcessor
{
@Execute
public void execute(@Optional MApplication application, @Optional EModelService modelService)
{
MTrimmedWindow window = (MTrimmedWindow)
modelService.find("", 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中,向org.eclipse.e4.workbench.model扩展点添加一个片段,该片段指向刚创建的.e4xmi模型片段,并将“apply”设置为always.
最后,在同一个扩展点上,添加了一个处理器并将其指向上面的类. beforefragment是真实的,并始终适用.
e4xmi文件仍然用于定义菜单,但在代码中,由于上面定义的处理器,无论工作区中保存了什么持久状态,都强制显示菜单.在将菜单拆分为单独的模型片段之后,我最终得到了这个解决方案,所以我不确定解决方案的那部分是否肯定是必需的,但大多数肯定是定义了处理器.