为什么不调用eclipse插件处理程序?

时间:2016-05-30 13:19:29

标签: java xml eclipse eclipse-plugin

我正在尝试编写一个供个人使用的eclipse插件。它应该是这样简单:下拉列表应该在工具栏中有3个项目(item1,item2,item3),它们是切换按钮。切换每个按钮时,环境变量或构建变量应采用相应的值。

我的问题是没有调用切换按钮的处理程序。

为了达到这个目的,我写了以下内容直到现在:

的plugin.xml     

   <extension point="org.eclipse.ui.commands">
      <category
            name="Sample Category"
            id="example.commands.category">
      </category>
      <command
            name="Sample Command"
            categoryId="example.commands.category"
            id="example.commands.sampleCommand">
      </command>
      <command
            name="Dropdown Command"
            categoryId="example.commands.category"
            id="example.commands.dropdownCommand">
      </command>
   </extension>

   <extension point="org.eclipse.ui.handlers">
      <handler
            commandId="example.commands.sampleCommand"
            class="example.handlers.SampleHandler">
      </handler>
      <handler
            commandId="example.commands.dropdownCommand"
            class="example.handlers.DropdownHandler">
      </handler>
   </extension>

   <extension point="org.eclipse.ui.menus">
      <menuContribution locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
         <toolbar
               id="example.toolbars.sampleToolbar"
               label="Sample Menu">
            <command
                  commandId="example.commands.sampleCommand"
                  tooltip="Say hello world"
                  id="example.toolbars.sampleCommand"
                  style="pulldown">
            </command>
         </toolbar>
      </menuContribution>
      <menuContribution locationURI="menu:example.toolbars.sampleCommand">
         <command commandId="example.commands.dropdownCommand" label="Processor1" style="toggle">
            <parameter name="example.toolbars.msg1" value="Processor1"></parameter>
         </command>

         <separator name="separator1" visible="true"/>

         <command commandId="example.commands.dropdownCommand" label="Processor2" style="toggle">
            <parameter name="example.toolbars.msg2" value="Processor2"></parameter>
         </command>

         <separator name="separator2" visible="true"/>

         <command commandId="example.commands.dropdownCommand" label="Processor3" style="toggle">
            <parameter name="example.toolbars.msg3" value="Processor3"></parameter>
         </command>
      </menuContribution>
   </extension>

</plugin>

DropdownHandler.java

public class DropdownHandler extends AbstractHandler {
    /**
     * The constructor.
     */
    public DropdownHandler() {
    }

    /**
     * the command has been executed, so extract extract the needed information
     * from the application context.
     */
    public Object execute(ExecutionEvent event) throws ExecutionException {
        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
        MessageDialog.openInformation(
                window.getShell(),
                "GreeHills Project",
                "Hello, Eclipse World");
        return null;
    }
}

SampleHandler.java

public class SampleHandler extends AbstractHandler {
    /**
     * The constructor.
     */
    public SampleHandler() {
    }

    /**
     * the command has been executed, so extract extract the needed information
     * from the application context.
     */
    public Object execute(ExecutionEvent event) throws ExecutionException {
        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
        MessageDialog.openInformation(
                window.getShell(),
                "GreeHills Project",
                "Please pick a processor from the dropdown list!");
        return null;
    }
}

用户界面很好,一切都在它的位置。 enter image description here

当我单击Sample Command时,会调用正确的处理程序,并且弹出窗口会显示相应的消息。 当我点击Processor1,Processor2或Processor3时没有任何反应,没有消息。

我发现这是谷歌搜索:https://wiki.eclipse.org/Menu_Contributions/Dropdown_Command 单独尝试(更改处理程序中的SysOutPrintln以显示MessageDialog)并得到相同的结果,不显示任何消息。

有关如何最终使我的插件正常工作的任何想法都受到高度赞赏!

1 个答案:

答案 0 :(得分:1)

所以你的问题是,当按下处理器2&#39;按钮例如,没有任何反应。

对于处理器2按钮,您已设置参数,但在命令部分中您不接受任何参数。

请你试试这个:

<command
    name="Dropdown Command"
    categoryId="example.commands.category"
    id="example.commands.dropdownCommand">
</command>

并且像这样做

<command name="Dropdown Command" categoryId="example.commands.category" id="example.commands.dropdownCommand">
      <commandParameter id="example.toolbars.msg2" name="DropOpts" optional="true"></commandParameter>
</command>

请注意,对于命令参数,我设置了&#34; example.toolbars.msg2&#34;这应该仅在按下处理2按钮时才有效