Проблема с запуском приложения Eclipse workbench

Я создал один плагин приложения workbench, а не приложение eclipse rcp. Я не создал шаблона плагина для этого рабочего места. Теперь, когда я запускаю активатор приложения Workbench, он не звонит. Я поместил System.out.println("Inside start()") в метод запуска Activator.java. Но он не вызывает метод запуска. Как я могу вызвать метод запуска? Но когда я делаю параметр 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) на myworkbenchplugin.Activator.custom(Activator.java:43) на myworkbenchplugin.Activator.start(Activator.java:36) на org.eclipse.osgi. framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783) в java.security.AccessController.doPrivileged(собственный метод) в 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)


person Bhanu    schedule 16.09.2010    source источник


Ответы (2)


Как вы уже видели, вам необходимо управлять своим манифест пакета OSGi, чтобы указать правильную политику активации. Обратите внимание, что:

Заголовки Eclipse-AutoStart и Eclipse-LazyStart устарели в Eclipse 3.4.
Начиная со спецификации OSGi R4.1 политика отложенной активации была принята спецификацией OSGi. Новый заголовок манифеста пакета OSGi Bundle-ActivationPolicy можно использовать для указания политики отложенной активации.

Equinox Framework версии 3.4 или более поздней по-прежнему будет поддерживать устаревшие заголовки Eclipse-LazyStart и Eclipse-AutoStart.
Разработчики пакетов, которые хотят, чтобы их пакеты работали в других реализациях OSGi Framework, должны добавить заголовок Bundle-ActivationPolicy в свой манифест. В большинстве случаев вы можете просто добавить следующий заголовок:

Bundle-ActivationPolicy: lazy

См. дизайн OSGi LazyStart. В вашем случае вы можете попробовать Bundle-ActivationPolicy: lazy;exclude:="yourPluginId", если хотите быть уверенным, что ваш плагин запустится, несмотря ни на что.

Для получения Active WorkbenchWindow вы можете использовать PlatformUI.getWorkbench().getActiveWorkbenchWindow(), как описано в Как получить имя проекта в eclipse?.

person VonC    schedule 16.09.2010
comment
Спасибо за информацию. все еще я получаю ту же проблему. Когда я использовал PlatformUI.getWorkbench().getActiveWorkbenchWindow(), он показывает исключение, которое Workbench не создал. Но когда я Workbench.getInstance().getActiveWorkbenchWindow(), он показывает, что окно IWorkbenchWindow равно null. Еще одна вещь, все эти исключения, которые я получил при отладке. Это не входило в консоль. Есть идеи, почему это не отображалось в консоли? Некоторые исключения отображаются в консоли. - person Bhanu; 16.09.2010
comment
нет, у меня нет точного сообщения об ошибке. Когда я отлаживаю, я только узнал, что он выдает исключение ... и это исключение не создано Workebnch. Но когда я использую код Workench.getInstance().getActiveWorkebenchWindow(), он возвращает значение null. - person Bhanu; 16.09.2010

Если вы запустите свой плагин при запуске Eclipse, Activator.start() будет вызван до того, как рабочая среда полностью запустится. Вам нужно вставить код внутри UIJob/WorkbenchJob в Activator, чтобы он вызывался после того, как окна рабочей среды будут готовы.

person Prakash G. R.    schedule 04.03.2011