Eclipse工作台应用程序启动问题

时间:2010-09-16 04:33:34

标签: eclipse-rcp

我创建了一个工作台应用程序插件而不是eclipse rcp应用程序。我没有为该工作台应用程序创建任何插件模板。 现在当我运行工作台应用程序时,Activator没有调用。我把 System.out.println(“Insided start()”)放在start方法的内部 的 Activator.java 即可。但它并没有调用start方法。我如何调用start方法?但是当我在运行配置插件中选择 Autostart = true 时, 它正在启动激活剂。但问题是当我调用 IWorkbenchWindow window = Workbench.getInstance()。getActiveWorkbenchWindow(); 它给出了错误消息,指出无法创建工作台窗口。仅当我将此插件设置为AutoStart = true时,才会显示此错误消息。可能是什么问题?


以下是我收到的错误消息..当我使用

IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
  

java.lang.IllegalStateException:尚未创建Workbench。     在org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92)at   myworkbenchplugin.Activator.custom(Activator.java:43)at   myworkbenchplugin.Activator.start(Activator.java:36)at   org.eclipse.osgi.framework.internal.core.BundleContextImpl $ 1.run(BundleContextImpl.java:783)     在java.security.AccessController.doPrivileged(Native Method)at   org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:774)     在   org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755)     在   org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)     在   org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:374)     在   org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1067)     在   org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:561)     在   org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:546)     在   org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:459)     在   org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)     在   org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:440)     在   org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)     在   org.eclipse.osgi.framework.eventmgr.EventManager $ EventThread.run(EventManager.java:337)

2 个答案:

答案 0 :(得分:1)

如您所见,您需要管理 OSGi bundle manifest 以指定正确的激活政策。请注意:

  

Eclipse 3.4中已弃用Eclipse-AutoStartEclipse-LazyStart标题   从OSGi R4.1规范开始,OSGi规范采用了延迟激活策略。新的OSGi捆绑包清单标题 Bundle-ActivationPolicy 可用于指定延迟激活策略。

     

Equinox Framework 3.4或更高版本将继续支持已弃用的Eclipse-LazyStartEclipse-AutoStart标头。
  希望捆绑包在其他OSGi Framework实现中工作的捆绑开发人员应将 Bundle-ActivationPolicy 标头添加到其清单中。在大多数情况下,您只需添加以下标题:

Bundle-ActivationPolicy: lazy

OSGi LazyStart design。 在您的情况下,如果您想确定您的插件无论如何都可以启动,您可以尝试Bundle-ActivationPolicy: lazy;exclude:="yourPluginId"

要获得有效WorkbenchWindow,您可以使用How to get the project name in eclipse?中详述的PlatformUI.getWorkbench().getActiveWorkbenchWindow()

答案 1 :(得分:1)

如果在Eclipse启动时启动插件,将在工作台完全启动之前调用Activator.start()。您需要在Activator中的UIJob / WorkbenchJob中推送代码,以便在工作台窗口准备就绪后调用它。