Java EclipseRCP-如何在工作台初始化之前关闭

Java EclipseRCP-如何在工作台初始化之前关闭,java,rcp,e4,Java,Rcp,E4,我的设置与以下类似: .... 更多属性。。。 公共类生命周期 { @施工后 公共工作 { //显示登录屏幕。如果用户取消登录,请关闭 //应用程序。 } } 在上面的场景中,正确关闭应用程序的方法是什么?如果我这样做: PlatformUI.getWorkbench().close() 我得到一个错误,因为它还没有初始化。如果我这样做: System.exit(0) 然后我杀死JVM上的所有其他东西(尽管这里建议这样做) 关于如何做到这一点,您有什么想法/建议吗?PlatformUI

我的设置与以下类似:


.... 更多属性。。。
公共类生命周期
{
@施工后
公共工作
{
//显示登录屏幕。如果用户取消登录,请关闭
//应用程序。
}
}
在上面的场景中,正确关闭应用程序的方法是什么?如果我这样做:

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

System.exit(0)
然后我杀死JVM上的所有其他东西(尽管这里建议这样做)


关于如何做到这一点,您有什么想法/建议吗?

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

@PostConstruct
在生命周期类中做任何事情都为时过早。您应该尝试并执行的第一点是
@PostContextCreate
方法

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

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渲染器,则可以从@PostContextCreate返回FALSE以关闭

有关更多信息,请参阅此博客:

成功了,谢谢!最后一个问题。使用您提供的代码,在工作台关闭之前,应用程序将在屏幕上短暂显示。有没有一种干净的方法可以防止这种情况发生?据我所知,没有。您可以尝试System.exit,但我认为这可能会使工作区一团糟。不幸的是,我使用的是SWT渲染器。