【发布时间】:2014-02-26 19:07:18
【问题描述】:
您好 RCP 开发人员,
我想在我的 ECLIPSE RCP 应用程序中实现 postWindowClose()。
在编写这个方法之前,我只是做了一个小测试,看看当我关闭我的应用程序时,该方法是否被调用,所以我这样做了:
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class MainWindowControl extends WorkbenchWindowAdvisor{
public MainWindowControl(IWorkbenchWindowConfigurer configurer) {
super(configurer);
// TODO Auto-generated constructor stub
}
@Override
public void postWindowClose() {
// TODO Auto-generated method stub
super.postWindowClose();
System.out.println("close");
}
}
我希望在 ECLIPSE 控制台中看到:close,但关闭应用程序后它仍然是空白的。
添加了所有必需的插件,启动或关闭应用程序时我没有错误。
那么,我错过了什么吗?
实现这个方法的原因是:
- 消息框:
Are you sure you want to close the application - 杀死所有正在运行的线程,我的应用程序上传文件,甚至当我关闭应用程序运行上传继续。我想在关闭应用程序时中止它们。
编辑:
我的生命周期课:
package upload.center.util;
import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate;
import org.eclipse.e4.ui.workbench.lifecycle.PreSave;
public class WindowLifeCycle {
@PostContextCreate
public void postContextCreate()
{
// TODO start up code here
System.out.println("open");
}
@PreSave
public void preSave()
{
// TODO add shutdown code here
System.out.println("close");
}
}
我的 plugin.xml :
<product ....
<property
name="windowLifeCycle"
value="bundleclass://UploadCenter.Source/upload.center.util.WindowLifeCycle">
</property>
...</product>
希望我说的够清楚。
伊斯梅尔
【问题讨论】:
-
我无法在 Kepler 上重现您的问题。实际上,我遇到了相反的问题:
postWindowClose被称为 两次。 -
为了理解这个问题,在发布这个问题之前,我创建了一个简单的
HelloWorld应用程序并实现了postWindowClose,控制台确实显示close两次,但不同的是,类生成扩展WorkbenchWindowAdvisor。就我而言,它不存在,所以我必须自己创建。另一件事,在我的项目中,我有Application.e4xmi,它在简单的HelloWorld中不存在 -
您是如何在 RCP 框架中注册您的顾问的? HelloWorld 应用程序也有执行此操作的代码。
-
这听起来像您有一个 Eclipse 4 (e4) 应用程序(使用 Application.e4xmi),它不使用旧的 WorkbenchWindowAdvisor(或任何旧的 3.x 东西)。
-
是的@greg-449,我正在使用e4。所以你告诉我 WorkBenchWindowAdvisor 在 e4 中已被弃用?