【问题标题】:In ecplipse RCP application automatically get Run option in menubar Want to remove it在 Eclipse RCP 应用程序中自动获取菜单栏中的运行选项想要删除它
【发布时间】:2017-09-07 03:28:00
【问题描述】:

enter image description here在我的 Eclipse RCP 应用程序中,我在菜单栏中自动获得运行选项。无需编写任何代码。所以,我想删除它。

默认情况下还会获取搜索菜单。这对于这个应用程序来说是可以的。但是,我手动创建的菜单项,如(文件,编辑器),这些项目和搜索菜单项的距离不一样。请帮助我解决这种情况,以克服 eclipse RCP 中的manu 项的距离。

【问题讨论】:

  • 查看您包含在 RCP 中的插件。如果您不想这样做,请忽略调试和启动插件。
  • 如果我从运行配置的插件中删除它,我会收到一条错误消息“MESSAGE Product Automatics.automaticsProduct 找不到。”stackoverflow.com/users/2670892/greg-449
  • 您可能指定了一组不一致的插件。如果您只需要核心 RCP 代码,最简单的方法是使用仅包含核心 RCP 代码的目标平台 - 例如找到 here 的“平台运行时二进制文件”

标签: eclipse eclipse-plugin swt eclipse-rcp jface


【解决方案1】:

只需将以下代码粘贴到 ApplicationWorkbenchWindowAdvisor.java 类中。

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");

        }
    }
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        编译器会提醒不建议使用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

        这个可以解决。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-17
          相关资源
          最近更新 更多