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渲染器。