Eclipse RCP 4应用在Mac OSX中如何移除「Preferences」菜单
解决Eclipse RCP 4 MacOS应用中禁用「Preferences」菜单选项的问题
我之前折腾过一模一样的问题——在Mac上跑RCP4应用时,系统自动在应用名称菜单里加了About和Preferences,要去掉Preferences确实得找对地方,下面是几个亲测有效的方法:
方法1:直接修改Application Model(最直观)
这是最简单的方式,不用写代码:
- 打开项目里的
Application.e4xmi文件 - 找到根节点Application,展开它的「Mac Menu」分支
- 你会看到自动生成的
About和Preferences菜单项,直接选中Preferences,右键删除即可 - 如果没看到Mac Menu,先确认你的RCP4项目启用了Mac菜单支持(一般新建RCP4项目默认会开启)
方法2:通过生命周期代码动态移除
如果你的菜单是动态生成的,或者想在代码里灵活控制,可以用这种方式:
- 找到项目里的生命周期类(就是带
@PostContextCreate或@ProcessAdditions注解的类,没有的话可以新建一个并在Application.e4xmi里注册) - 注入
MApplication和EModelService,然后在启动时遍历Mac菜单移除Preferences:
@Inject private MApplication application; @Inject private EModelService modelService; @PostContextCreate public void customizeMacMenu() { MMenu macAppMenu = application.getMacMenu(); if (macAppMenu == null) { return; } // 遍历菜单子项,找到Preferences并移除 Iterator<MMenuElement> iterator = macAppMenu.getChildren().iterator(); while (iterator.hasNext()) { MMenuElement element = iterator.next(); if (element instanceof MHandledMenuItem) { MHandledMenuItem menuItem = (MHandledMenuItem) element; // 用命令ID判断比文本更可靠,避免多语言环境下的文本差异 if ("org.eclipse.ui.window.preferences".equals(menuItem.getCommand().getElementId())) { iterator.remove(); break; } } } }
方法3:通过扩展点禁用默认Preferences命令
如果想从根源上禁用这个命令,不让它出现在任何地方,可以修改plugin.xml:
- 添加
org.eclipse.ui.commands扩展点,覆盖默认的Preferences命令:
<extension point="org.eclipse.ui.commands"> <command id="org.eclipse.ui.window.preferences" name="Preferences" enabled="false" description="Disabled in this RCP app"> </command> </extension>
这样不仅Mac菜单里的Preferences会消失,其他地方(比如快捷键绑定)的Preferences入口也会被禁用。
内容的提问来源于stack exchange,提问作者João Pereira
相关产品推荐
相关产品推荐

