1

我有一个应用程序并想连接到现有命令。但我不想替换任何现有的处理程序,我想添加功能(最好在默认处理程序完成执行之后)。

这可能吗?还是我必须找到另一种方法来做到这一点?

场景是这样的:当有人在 Eclipse 中复制内容时,我想注册。然后我想用用户复制的东西做一些事情。由于现有的复制功能很棒,我不想改变它。但我想知道何时有人执行了复制命令。

注意:这只需要在 Eclipse 中工作!;) 我不需要在 Eclipse 之外监视剪贴板。

4

1 回答 1

2

我想我找到了一种方法来做到这一点!经过大量研究,我发现了这个接口:IExecutionListener。javadoc 说:

命令执行的侦听器。如果命令即将执行以及执行完成时,将通知此侦听器。侦听器不可能阻止执行,只能以某种方式对其进行响应。

正是我想要的:不要干扰现有命令,但在执行时得到通知。

因此,这里是向默认复制命令添加执行侦听器的代码:

public void addListenerToCopyCommand() {
    ICommandService commandService = (ICommandService) PlatformUI
      .getWorkbench().getAdapter(ICommandService.class);
    Command defaultCopyCommand = commandService
      .getCommand(org.eclipse.ui.IWorkbenchCommandConstants.EDIT_COPY);
    defaultCopyCommand.addExecutionListener(new MyCopyListener());
}

public class MyCopyListener implements IExecutionListener {
        @Override
        public void preExecute(String commandId, ExecutionEvent event) {
            // do nothing
        }

        @Override
        public void postExecuteSuccess(String commandId, Object returnValue) {

            // !!! Do stuff with the copied things here !!!!

            System.out.println("copy command has executed");

        }

        @Override
        public void postExecuteFailure(String commandId,
                ExecutionException exception) {
            // do nothing
        }

        @Override
        public void notHandled(String commandId, NotHandledException exception) {
            // do nothing
        }    
}

我现在要做的就是为我的插件添加一个激活器,它将在插件启动时运行,瞧:每当用户复制任何内容时都会通知我的插件!

于 2013-07-18T13:19:49.510 回答