快捷键在eclipse RCP java项目中不起作用

时间:2015-01-21 10:13:14

标签: java eclipse-rcp keyboard-shortcuts

我有一个日食RCP java项目,其中我启用了快捷键 Ctrl + H ctrl + S 用于保存和其他活动。它工作正常,直到我用64位Eclipse indigo导入我的项目。大多数密钥都在工作,但这两个没有。我检查过 Ctrl + S 与defaultHandler相关联。

现在它抛出以下异常:

ENTRY org.eclipse.ui.workbench 2 0 2015-01-21 15:07:08.646
!MESSAGE A handler conflict occurred.  This may disable some commands.
!SUBENTRY 1 org.eclipse.ui.workbench 2 0 2015-01-21 15:07:08.646
!MESSAGE Conflict for 'org.eclipse.ui.file.save':
HandlerActivation(commandId=org.eclipse.ui.file.save,
    handler=org.eclipse.ui.internal.handlers.SaveHandler@4e65ad52,
    expression=,sourcePriority=0)

更新

public class KBShortcutsHandler extends AbstractHandler {

    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {

        if (event.getCommand().getId().equals("org.eclipse.ui.file.save")) {
                        new XyzHandler(XConstants.SAVE_EDITOR_ID)
                .run();
        }
    }

}

在plugin.xml中

     <command
            defaultHandler="KBShortcutsHandler"
            id="org.eclipse.ui.file.save"
            name="save">
      </command>

只需将代码写入&#34;添加操作&#34;它工作正常,但现在不行。

2 个答案:

答案 0 :(得分:0)

Eclipse已经有org.eclipse.ui.file.save命令的定义,因此您不应该自己尝试定义它。而是使用org.eclipse.ui.handlers扩展点来定义代码处于活动状态时使用的处理程序。

以下是Debug插件如何处理'delete'命令的示例:

<extension
     point="org.eclipse.ui.handlers">
  <handler
        class="org.eclipse.debug.internal.ui.views.launch.TerminateAndRemoveHandler"
        commandId="org.eclipse.ui.edit.delete">
     <activeWhen>
        <iterate
              ifEmpty="false"
              operator="and">
           <adapt
                 type="org.eclipse.debug.core.model.ITerminate">
           </adapt>
        </iterate>
     </activeWhen>
  </handler>
</extension>

我注意到你的常量XConstants.SAVE_EDITOR_ID - 如果你试图保存在编辑器中,那么如果它基于EditorPart则不需要做任何事情。

答案 1 :(得分:0)

  • 这&#34; org.eclipse.ui.workbench_3.7.1.v20120104-1859.jar"工作台 jar必须包含里面存在的SaveHandler类 org.eclipse.ui.internal.handlers包。 必须从plugin.xml中删除以下行

这适合我。