Eclipse冲突处理程序

时间:2013-06-15 09:47:48

标签: eclipse-plugin eclipse-rcp handler manifest

在开发eclipse插件时,我在带有id crtc_v4.session的Manifest扩展中使用默认处理程序crtc_v4.handlers.StartSession创建了一个命令,我在清单中为此命令添加了一个处理程序,这个处理程序根据变量启用命令crtc_v4.sessionvar。

控制台上出现的问题是:

!MESSAGE Conflicting handlers for crtc_v4.session:  {crtc_v4.handlers.StartSession@98bc5c} vs {crtc_v4.handlers.StartSession@1265d09}

但它不会阻止运行插件。我问的是这个问题的解决方案,以及它是否会影响我的插件的性能?

编辑:

定义命令的代码段:

 <extension
     point="org.eclipse.ui.menus">
  <menuContribution
        allPopups="false"
        locationURI="toolbar:org.eclipse.ui.main.toolbar">
     <toolbar
           id="crtc_v5.crtctoolbar">
        <command
              commandId="crtc_v5.session"
              icon="icons/neutral.png"
              label="Start Session"
              style="push">
        </command>
     </toolbar>
  </menuContribution>

定义处理程序的代码段:

 </extension>
      <command
        defaultHandler="crtc_v5.handlers.StartSession"
        id="crtc_v5.session"
        name="session">
  </command>
 </extension>

这是对sessionvar的启用:

  <extension
     point="org.eclipse.ui.handlers">
  <handler
        class="crtc_v5.handlers.StartSession"
        commandId="crtc_v5.session">
     <enabledWhen>
        <with
              variable="crtc_v5.sessionvar">
           <equals
                 value="LOGGEDIN">
           </equals>
        </with>
     </enabledWhen>
  </handler>

1 个答案:

答案 0 :(得分:7)

您已在命令中定义了默认处理程序,并在 org.eclipse.ui.handlers 扩展名中定义了另一个。如果要使用 enabledWhen ,只需删除 defaultHandler 属性(因为两个实例都提供相同的处理程序, crtc_v5.handlers.StartSession )。 / p>

如果您希望让不同的处理程序根据应用程序状态提供命令行为,则可以在 org.eclipse.ui.handlers 定义中使用 activeWhen ,但这似乎并非如此。