gpt4 book ai didi

java - 在 Eclipse 插件中实现处理程序

转载 作者:行者123 更新时间:2023-11-30 04:49:04 26 4
gpt4 key购买 nike

我在 Eclipse 插件(在 Indigo 上开发)中有一个处理程序,我希望每次在文本编辑器中保存(或打开,理想情况下)Java 文件时运行该处理程序。据我所知,有两种方法可以实现这一目标:

  1. 通过 CommandService API 以编程方式进行。
  2. 使用plugin.xml中的配置

这两个我都试过了。方法一如下:

public class Activator extends AbstractUIPlugin {
@Override
public void start(final BundleContext context) throws Exception {
super.start(context);
ICommandService commandService = (ICommandService) PlatformUI
.getWorkbench().getService(ICommandService.class);
commandService.addExecutionListener(new MyListener());
plugin = this;
}
...
}

public class MyListener implements IExecutionListener {
@Override
public void postExecuteSuccess(final String commandId, final Object returnValue) {
System.out.println("PostEventSuccess:" + commandId);
}

@Override
public void preExecute(final String commandId, final ExecutionEvent event) {}

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

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

和方法2.像这样:

<extension point="org.eclipse.ui.handlers">
<handler
commandId="org.eclipse.ui.file.save"
class="mypackage.MyHandler">
<activeWhen>
<with variable="activeWorkbenchWindow">
<instanceof value="org.eclipse.ui.IWorkbenchWindow"/>
</with>
</activeWhen>
</handler>
</extension>

方法 1. 根本不运行我的监听器。方法 2. 有效,因为处理程序被执行,但我的处理程序似乎替换了默认处理程序。当用户尝试保存文件时,我的处理程序会运行,但文件不会保存。处理程序本身似乎很好(我已经通过创建运行它的菜单项对其进行了测试)。

方法 1. 现在是否已弃用,或者我是否错误地实现了该服务?如何使用方法 2. 保存文件?可以从我的处理程序运行默认处理程序吗?

最佳答案

这两者的区别不仅仅在于一个是程序性的,另一个是声明性的。我认为定义命令处理程序是错误的,因为它处理命令执行,而不是仅仅通知命令已执行。您的第一种方法似乎不错,但是直到插件被激活后您的代码才会执行​​,这是在加载包中的第一个类时延迟发生的。 Eclipse 中有一个解决方法:为 org.eclipse.ui.startup 扩展点做出贡献。使例如您的 Activator 类实现 IStartup,您可以使用空实现 - 唯一的一点是让框架从您的包中加载任何类.

关于java - 在 Eclipse 插件中实现处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10253335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com