【发布时间】:2016-02-05 19:03:13
【问题描述】:
我正在尝试扩展“org.eclipse.ui.startup”扩展点。 但似乎在 eclipse e4 中,它甚至没有被调用。 这个扩展在 eclipse e4(Juno) 中被破坏了吗
【问题讨论】:
标签: eclipse eclipse-rcp eclipse-juno e4
我正在尝试扩展“org.eclipse.ui.startup”扩展点。 但似乎在 eclipse e4 中,它甚至没有被调用。 这个扩展在 eclipse e4(Juno) 中被破坏了吗
【问题讨论】:
标签: eclipse eclipse-rcp eclipse-juno e4
我遇到了同样的问题,但找不到答案,但在此过程中,我发现了 LifeCycleHandler,它更适合我的目的。这对您来说可能也是一个不错的选择。
就像启动扩展一样,您可以从您的 plugin.xml 中引用处理程序:
<property name="lifeCycleURI" value="platform:/plugin/<plug-in-id>/<path-to-handler-class>" />
在处理程序中,您可以使用注解来标记要调用的方法以及依赖注入:
public class StartupHandler {
@Inject
Foo bar;
@PostContextCreate
public void startup(IEclipseContext context) {
// do something
}
}
您可以在此处找到详细示例:https://marcteufel.wordpress.com/2011/05/05/231/
【讨论】:
IStartup#earlyStartup() 需要兼容层,因此在纯 E4 应用程序中不起作用。 (见#1)
要在纯 E4 应用程序中启动进程,您应该使用生命周期挂钩。所以:
从 plugin.xml 引用您的 ApplicationLifecycle 处理程序类
<property name="lifeCycleURI" value="platform:/plugin/<plug-in-id>/<path-to-handler-class>" />
编写你的生命周期处理程序类
public class ApplicationLifecycleHandler {
@PostContextCreate
public void startup(IEclipseContext context) {
// do initialization
}
}
添加一个钩子来处理应用程序启动完成时的事件
@PostContextCreate
public void postContextCreate(final IEventBroker eventBroker, etc .. ) {
//
eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE,
new EventHandler() {
@Override
public void handleEvent(Event event) {
// Your code executed at startup,
// after application startup is completed
}
});
}
【讨论】: