2010-09-16 8 views
1

J'ai créé une application de plan de travail plugin not eclipse rcp. Je n'ai créé aucun modèle de plugin pour cette application de workbench. Maintenant, lorsque j'exécute l'application Workbench, Activator n'appelle pas. Je mets System.out.println ("Insided start()") à l'intérieur de la méthode de démarrage du Activator.java. Mais il n'appelle pas la méthode de démarrage. Comment je fais appeler la méthode de démarrage? Mais quand je fais l'option, Autostart = true dans la configuration, les plug-ins, Il démarre l'activateur. Mais le problème est lorsque j'appelle IWorkbenchWindow window = Workbench.getInstance(). GetActiveWorkbenchWindow(); Il donne le message d'erreur indiquant que la fenêtre du plan de travail n'a pas pu être créée. Ce message d'erreur est donné seulement quand je fais ce plugin comme AutoStart = true. Quel pourrait être le problème?Problème de démarrage de l'application Eclipse Workbench


Après sont le message d'erreur que je get..When J'utilise

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

java.lang.IllegalStateException: Workbench n'a pas encore été créé. à 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 (méthode native) à 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) au org.eclipse.osgi.framework.internal.core.AbstractBundle.resume (AbstractBundle.java:374) au 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)

Répondre

1

Comme vous avez déjà vu, vous devez gérer votre OSGi bundle manifest de préciser la politique d'activation droite. Notez cependant que:

Les en-têtes Eclipse-AutoStart et Eclipse-LazyStart ont été dépréciés dans Eclipse 3.4.
À partir de la spécification OSGi R4.1, la politique d'activation paresseuse a été adoptée par la spécification OSGi. Le nouvel en-tête du manifeste du bundle OSGi Bundle-ActivationPolicy peut être utilisé pour spécifier une stratégie d'activation différée. La version 3.4 ou ultérieure d'Equinox Framework continuera à prendre en charge les en-têtes obsolètes Eclipse-LazyStart et Eclipse-AutoStart.
Les développeurs de bundles souhaitant que leurs bundles fonctionnent avec d'autres implémentations de Framework OSGi doivent ajouter l'en-tête Bundle-ActivationPolicy à leur manifeste. Dans la plupart des cas, vous pouvez simplement ajouter l'en-tête suivant:

Bundle-ActivationPolicy: lazy 

Voir OSGi LazyStart design. Dans votre cas, vous pouvez essayer Bundle-ActivationPolicy: lazy;exclude:="yourPluginId" si vous voulez être sûr que votre plugin démarre quoi qu'il arrive.

Pour obtenir le WorkbenchWindow actif, vous pouvez utiliser PlatformUI.getWorkbench().getActiveWorkbenchWindow() comme détaillé dans How to get the project name in eclipse?.

+0

merci pour l'information. toujours je reçois le même problème. Lorsque j'ai utilisé PlatformUI.getWorkbench(). GetActiveWorkbenchWindow(), il affiche l'exception que Workbench n'a pas créée. Mais quand je Workbench.getInstance(). GetActiveWorkbenchWindow(), il montre fenêtre est IWorkbenchWindow est null. Encore une chose toutes ces exceptions que j'ai eues quand j'ai débogué. Ça ne venait pas dans la console. Une idée de pourquoi il ne montre pas dans la console? Quelques exceptions il montre dans la console. – Bhanu

+0

@Bhanu: avez-vous le message d'erreur exact? – VonC

+0

non je n'ai pas le message d'erreur exact. Quand je débugue seulement appris à savoir qu'il lance exception .. et cette exception est Workebnch pas créé. Mais quand j'utilise le code Workench.getInstance(). GetActiveWorkebenchWindow(), il retourne null. – Bhanu

1

Si vous démarrez votre plug-in au démarrage d'Eclipse, Activator.start() sera appelé avant le démarrage complet du workbench. Vous devez insérer le code à l'intérieur d'un UIJob/WorkbenchJob dans l'activateur, afin qu'il soit appelé après que les fenêtres du plan de travail soient prêtes.

Questions connexes