怎么办?
一检查,其RCP应用中添加了org.eclipse.ui.ide依赖,很显然,这些项是由此插件产生的。
而且很可能是通过org.eclipse.ui.actionSets扩展点配置的menuBarPath产生的。
我们知道,RCP应用的顶级菜单栏,工具栏,状态栏等都是由ActionBarAdvisor的实现类决定的。
好吧。去看看这个类的实现。
protected void fillMenuBar(IMenuManager menuBar) {
MenuManager mHelp = new MenuManager("Help",IWorkbenchActionConstants.M_HELP);//请注意这里,第二个参数(MenuManger的id)
mHelp.add(aboutAction);
menuBar.add(mHelp);
}
fillCoolBar是空实现。
上面标有注释的MenuManager的id正是Eclipse IDE中内置的帮助菜单的ID(help)。
想想,是不是因为此id与内置id相同,而且,因为此内置的MenuManager中添加了很多点位符(插入点)而造成的呢?
试图将其id修改了一下()MenuManager("Help",IWorkbenchActionConstants.M_HELP + "1")。
运行,发现help下的无关菜单都没有了。
但Search,run以及工具栏上的无关项仍然存在。
想了下,是不是可以在WorkbenchWindow打开后将这些项给删掉呢?
也许是一个方法,立即行动。
重写WorkbenchWindowAdvisor实现类的postWindowOpen方法。
@Override
public void postWindowOpen() {
IMenuManager menuManager = getWindowConfigurer().getActionBarConfigurer().getMenuManager();
IContributionItem[] items = menuManager.getItems();
for(int i=0; i<items.length; i++){
System.out.println(items[i].getId());//先将所有contribution的id枚举出来
}
menuManager.remove("org.eclipse.search.menu");//逐个删除
menuManager.remove("org.eclipse.ui.run");
menuManager.update(true);//核心
//针对CoolBar我采取了同样的方式。
ICoolBarManager coolManager = getWindowConfigurer().getActionBarConfigurer().getCoolBarManager();
IContributionItem[] items2 = coolManager.getItems();
for(int i=0; i<items2.length; i++){
System.out.println(items2[i].getId());
}
问题立解。
实际上,由于Eclipse平台的开放性(允许各个插件contribution),当RCP项目变得比较大时,此类情况还是出现
得比较多的,以前就碰到过在首选项中出现了无关项。这一类问题均可能通过这种先枚举出id,然后删除的方式去
解决。
原文:http://blog.csdn.net/cuser_online/article/details/7029136#comments