在 Eclipse RCP 应用程序中自动获得菜单栏中的 运行 选项想要删除它

In ecplipse RCP application automatically get Run option in menubar Want to remove it

enter image description here在我的 Eclipse RCP 应用程序中,我在菜单栏中自动获得 运行 选项。不写任何code.So,我想删除这个。

还默认获取搜索菜单。这对这个应用程序来说是可以的。但是,我手动创建的菜单项,如 (File, editor) ,这些项目和搜索菜单项的距离不一样 manner.please 帮助我解决了这种情况,以克服 eclipse RCP 中 manu 项目的距离。

只需将下面的代码粘贴到 ApplicationWorkbenchWindowAdvisor.java class 中。

public void postWindowOpen() { 
    // remove unwanted UI contributions that eclipse makes by default
    IWorkbenchWindow[] windows = PlatformUI.getWorkbench ().getWorkbenchWindows();
    for (int i = 0; i < windows.length; ++i) {
        IWorkbenchPage page = windows[i].getActivePage();
        if (page != null) {

            WorkbenchWindow workbenchWin = (WorkbenchWindow)PlatformUI.getWorkbench().getActiveWorkbenchWindow();
            MenuManager menuManager = workbenchWin.getMenuManager();
            IContributionItem[] items = menuManager.getItems();

            for(IContributionItem item : items) {
                if(item.getId().equals("org.eclipse.ui.run")){
              item.setVisible(false);
                }
            }
            // hide 'Search' commands
            page.hideActionSet("org.eclipse.search.searchActionSet");

        }
    }
}

我建议使用插件间谍功能。 Alt+shift+F1Alt+shift+F2。 你可以先在你的开发环境中使用,你可以在你的rcp上使用plugin spy。只需将 org.eclipse.pde.runtime 插件添加到您的 rcp。

并且您可以找出哪个插件在您的 rcp 上贡献了菜单项,如果您认为该插件不是必需的,您可以从您的 rcp 中删除该插件。

要删除菜单中的所有默认选项,您需要在 ApplicationWorkbenchWindowAdvisor.java class 中添加以下代码。

@Override
public void postWindowOpen() { 
    IWorkbenchWindow workbenchWindow =  PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    IContributionItem[] items = ((WorkbenchWindow)workbenchWindow).getMenuBarManager().getItems();
    for (IContributionItem item : items) {
            item.setVisible(false);
    }
}

编译器会提示不建议使用WorkbenchWindow访问UI,与Target中的库org.eclipse.ui.workbench冲突

@Override
public void postWindowCreate() {
    IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows();
    for (int i = 0; i < windows.length; i++) {
        IWorkbenchPage page = windows[i].getActivePage();
        if (page != null) {
            IMenuManager menuMgr = getWindowConfigurer().getActionBarConfigurer().getMenuManager();
            IContributionItem[] items = menuMgr.getItems();
            
            for (IContributionItem item: items) {
                
                if (item.getId().equals("org.eclipse.ui.run")) {
                    item.setVisible(false);
                } else if (item.getId().equals("org.eclipse.search.menu")) {
                    item.setVisible(false);
                }
                System.out.println(item);
            }
            page.hideActionSet("org.eclipse.search.searchActionSet");
        }
        
    }
}

我将其更改为从 getWindowConfigurer().getActionBarConfigurer().getMenuManager();

获取 MenuManager

这个可以解决