Java 如何在Eclipse插件中侦听用户出口?

Java 如何在Eclipse插件中侦听用户出口?,java,eclipse-plugin,Java,Eclipse Plugin,我正在为一个大学项目编写一个Eclipse插件,需要能够在用户退出时运行代码,而我找不到正确的侦听器使我能够这样做。下面显示了一个类似代码的示例,其中我侦听成功完成的save事件,并在发生这种情况时调用一个方法 public class ExecutionListener implements IExecutionListener{ private DataCollector dataCollector; public ExecutionListener(DataCollector data

我正在为一个大学项目编写一个Eclipse插件,需要能够在用户退出时运行代码,而我找不到正确的侦听器使我能够这样做。下面显示了一个类似代码的示例,其中我侦听成功完成的save事件,并在发生这种情况时调用一个方法

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:)如果插件提供了构建器,而构建器尚未完成,是否调用此函数?我想允许用户在请求关闭时取消我的生成器(取消会使库处于不稳定状态,并且我无法控制库代码,因此无法修复)。