Java 如何在Eclipse插件中侦听用户出口?
我正在为一个大学项目编写一个Eclipse插件,需要能够在用户退出时运行代码,而我找不到正确的侦听器使我能够这样做。下面显示了一个类似代码的示例,其中我侦听成功完成的save事件,并在发生这种情况时调用一个方法Java 如何在Eclipse插件中侦听用户出口?,java,eclipse-plugin,Java,Eclipse Plugin,我正在为一个大学项目编写一个Eclipse插件,需要能够在用户退出时运行代码,而我找不到正确的侦听器使我能够这样做。下面显示了一个类似代码的示例,其中我侦听成功完成的save事件,并在发生这种情况时调用一个方法 public class ExecutionListener implements IExecutionListener{ private DataCollector dataCollector; public ExecutionListener(DataCollector data
public class ExecutionListener implements IExecutionListener{
private DataCollector dataCollector;
public ExecutionListener(DataCollector dataCollector)
{
this.dataCollector = dataCollector;
}
public void postExecuteSuccess(String action, Object arg1)
{
if (action.equals("org.eclipse.ui.file.save")) {
dataCollector.writeDatabase();
}
}
所以我想要的是一个监听器,它允许我监听退出事件,并在发生这种情况时调用一个方法来运行我的代码。我想我无法确保在运行代码之前成功完成退出,但是“预退出”侦听器可以正常工作。另外,如果有人知道正确的侦听器,他们是否也可以告诉我退出事件所需的commandId(例如,上面示例中save事件的commandId是“org.eclipse.ui.file.save”)
谢谢,雅各布
编辑:回答javamonkey79的问题:
我添加如下侦听器:
/* Adds a listener to listen for file save events if needed. */
if (executionListener == null) {
ICommandService service = (ICommandService) Activator.getDefault().getWorkbench().
getService(ICommandService.class);
executionListener = new ExecutionListener();
service.addExecutionListener(executionListener);
}
插件的Activator类包含一个stop()方法。激活器是插件中扩展插件类的类,在Manifest.MF的“Bundle Activator”标记处引用 当工作区关闭时,所有插件都将停止。然后,您可以在本节中添加所需的任何清理代码
public void stop(BundleContext context) throws Exception {
plugin = null;
// Code to clean up here...
super.stop(context);
}
。API中有趣的片段:
注1:如果已安装插件
自动启动,此方法
将由
平台关闭时的平台
放下
使用此方法而不是在UI上使用侦听器的优点是,您知道无论用户如何离开工作区,都会调用此方法。请参阅我提出的参考问题,该问题是针对不同的问题提出的。即如何检测JVM正在以不规则的方式关闭。例如,由于强制关闭操作系统。您是如何添加此侦听器的?它是javamonkey 79,不是29,而是对编辑和响应进行了投票-谢谢vm:)如果插件提供了构建器,而构建器尚未完成,是否调用此函数?我想允许用户在请求关闭时取消我的生成器(取消会使库处于不稳定状态,并且我无法控制库代码,因此无法修复)。