我有一个日食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;它工作正常,但现在不行。
答案 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中删除以下行
这适合我。