在开发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>
答案 0 :(得分:7)
您已在命令中定义了默认处理程序,并在 org.eclipse.ui.handlers 扩展名中定义了另一个。如果要使用 enabledWhen ,只需删除 defaultHandler 属性(因为两个实例都提供相同的处理程序, crtc_v5.handlers.StartSession )。 / p>
如果您希望让不同的处理程序根据应用程序状态提供命令行为,则可以在 org.eclipse.ui.handlers 定义中使用 activeWhen ,但这似乎并非如此。