Eclipse RCP Command的Handler设置不起作用?

来源:互联网 发布:淘宝排名越来越靠后 编辑:程序博客网 时间:2024/04/27 23:14

网上很多种教程教我们设置Command的Handler从而可以有效的控制Command的使用状态,比如只针对某种类型文件启用Command等。

但当我们按教程上一步步试用时,却看不到期望的效果,command总是一直出现,不能随着Handler的设置而变化。如以下的Handler:

<extension        point="org.eclipse.ui.handlers">

      <handler          class="test.TestCommand"   commandId="test.command ">

         <activeWhen>

            <iterate>

               <adapt                     type="org.eclipse.core.resources.IResource">

                  <test                        property="org.eclipse.core.resources.name"                        value="*.java">

                  </test>

               </adapt>

            </iterate>

         </activeWhen>

      </handler>

理论上来说,它是只当我们选中java文件时,test.command命令才会起作用。但当我们测试运行时,command一直正常使用。

解决方法:将test.command的扩展处,将其defaultHandler内容删除。如下所示:

<extension         point="org.eclipse.ui.commands">

      <command            id="test.command "            name="Test">

      </command>

   </extension>

回过头来,我们可以理解到:如果此处定义 了defaultHandler,系统会将这个做为默认的Handler来处理,而不会执行到我们定义的Handler,因此从这里我们可以看出,sorg.eclipse.ui.handler实际上就是一层过滤器,当我们没有定义Command的defaultHandler时,会默认去寻找其它地方定义(org.eclipse.ui.handlers)里的内容,正因为这样,我们定义的这些规则也在这里起了作用。

刚接触RCP,遇到此问题,没能解决,此处文字记录下来。

转载请注明版权。