Eclipse RCP - 如何在 workbench 初始化之前关闭

Eclipse RCP - How to shutdown before workbench initializes

我的设置与下面类似:

<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 ...
public class LifeCycle
{
  @PostConstruct
  public void doWork()
  {
    // Show a login screen. If the user cancels out of it, shut down
    // the application. 
  }
}

在上述场景中,正确关闭应用程序的正确方法是什么?如果我这样做:

PlatformUI.getWorkbench().close()

我得到一个错误,因为它还没有初始化。如果我这样做:

System.exit(0)

然后我杀死 JVM 上的所有其他东西(尽管建议在这里这样做 http://www.vogella.com/tutorials/Eclipse4LifeCycle/article.html

任何关于如何做到这一点的ideas/suggestions?

PlatformUI 在 e4 应用程序中不可用,请勿尝试使用它。

@PostConstruct 在 LifeCycle class 中做任何事情都太早了。您应该尝试做任何事情的第一点是 @PostContextCreate 方法。

您可以注入 org.eclipse.e4.ui.workbench.IWorkbench 并调用 close 方法来关闭 e4 应用程序。但是 workbench 在应用程序启动完成之前不可用,因此您需要等待此事件。

public class LifeCycle
{
  @PostContextCreate
  public void postContextCreate(IEclipseContext context, IEventBroker eventBroker)
  {
    ...

    eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE,
                          new AppStartupCompleteEventHandler(eventBroker, context));
  }
}


class AppStartupCompleteEventHandler implements EventHandler
{
 private IEventBroker _eventBroker;
 private IEclipseContext _context;


 AppStartupCompleteEventHandler(IEventBroker eventBroker, IEclipseContext context)
 {
   _eventBroker = eventBroker;
   _context = context;
 }

 @Override
 public void handleEvent(final Event event)
 {
   _eventBroker.unsubscribe(this);

   IWorkbench workbench = _context.get(IWorkbench.class);

   workbench.close();
 }
}
如果您使用的是 SWT 渲染器,

System.exit() 是当前中止 E4 启动的唯一方法。

如果您使用来自 e(fx)clipse 的 JavaFX 渲染器,您可以 return FALSE 从 @PostContextCreate 到关闭。

有关详细信息,请参阅此博客: http://tomsondev.bestsolution.at/2014/11/03/efxclipse-1-1-new-features-api-to-restart-your-e4-app-on-startup/