【问题标题】:Implement postWindowClose() in RCP application在 RCP 应用程序中实现 postWindowClose()
【发布时间】: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,但关闭应用程序后它仍然是空白的。

添加了所有必需的插件,启动或关闭应用程序时我没有错误。

那么,我错过了什么吗?

实现这个方法的原因是:

  1. 消息框:Are you sure you want to close the application
  2. 杀死所有正在运行的线程,我的应用程序上传文件,甚至当我关闭应用程序运行上传继续。我想在关闭应用程序时中止它们。

编辑:

我的生命周期课:

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 中已被弃用?

标签: java eclipse rcp e4


【解决方案1】:

对于纯 Eclipse 4 (e4) 应用程序,不使用工作台窗口顾问(和其他顾问)。您使用生命周期类的@PreSave 方法在关机期间运行代码。

public class LifeCycle
{
  @PostContextCreate
  public void postContextCreate()
  {
    // TODO start up code here
  }

  @PreSave
  public void preSave()
  {
     // TODO add shutdown code here
  }
}

plugin.xml的产品定义中声明生命周期类:

<extension
     id="product"
     point="org.eclipse.core.runtime.products">
  <product
        name="%product.name"
        application="org.eclipse.e4.ui.workbench.swt.E4Application">
      <property
           name="lifeCycleURI"
           value="bundleclass://plugin-id/package.LifeCycle">
     </property>
     .... more properties ...

更多详情见here

【讨论】:

  • 你能看看我的编辑吗?我无法显示openclose
  • @IsmailSen UploadCenter.Source (尾随空格)真的是包含生命周期类的插件的id吗?
  • 不,没有空间,我已经编辑了我的帖子。这是磁带错误。这是我的项目组织:UploadCenter.ProductUploadCenter.FeatureUploadCenter.Source。 plugin.xml 在UploadCenter.Source
  • 属性名称必须lifeCycleURI而不是windowLifeCycle
  • 如果您尝试停止应用程序关闭,请使用IWindowCloseHandler
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多