Jac*_*cey 4 java eclipse-plugin
我正在为一个大学项目编写一个Eclipse插件,并且需要能够在用户退出时运行代码,而我找不到正确的Listener来让我这样做.下面显示了类似代码的示例,其中我监听成功完成的保存事件并在发生这种情况时调用方法.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
所以我想要的是一个监听器,它允许我监听退出事件并调用一个方法来运行我的代码.我想在运行代码之前我无法确保退出成功完成,但"退出前"监听器可以正常工作.此外,如果有人确实知道正确的监听器,他们也可以告诉我退出事件所需的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);
}
Run Code Online (Sandbox Code Playgroud)
插件的Activator类包含一个stop()方法.Activator是插件中的类,它扩展了Plugin类,并在Manifest.MF中的"Bundle-Activator"标记中引用. OSGi文档包含插件生命周期的描述.
当工作区关闭时,所有插件都会停止.然后,您可以在此部分中添加所需的任何清理代码.
public void stop(BundleContext context) throws Exception {
plugin = null;
// Code to clean up here...
super.stop(context);
}
Run Code Online (Sandbox Code Playgroud)
API描述何时调用此方法.来自API的有趣片段:
注意1:如果已自动启动插件,平台关闭时平台将自动调用此方法.
使用此方法而不是在UI上使用侦听器的优点是,您知道无论用户如何离开工作区,都将调用它.
| 归档时间: |
|
| 查看次数: |
2591 次 |
| 最近记录: |