2009-03-06 7 views
1

Je développe mon propre plugin Eclipse et suis tombé sur un comportement très étrange. Dans certains cas très spécifiques, Eclipse ne se ferme pas lorsque je ferme le plan de travail. Il reste juste suspendu jusqu'à ce que je tue le processus. Cela se produit lors de l'exécution de PDE et lors de l'exécution en tant qu'installation régulière.Eclipse ne quittera pas avec mon plugin

Il est vraiment difficile de fournir plus de détails et je sais que c'est une question très générique. Pourtant, je me demandais si quelqu'un avait rencontré un tel comportement et pouvait partager la solution.

Merci. Zviki

PS. J'attache des traces de pile de tous les threads en cours d'exécution après la fermeture du workbench. Peut-être que quelque chose va sortir. Cette trace a été obtenue en exécutant l'EDI en mode débogage, en le suspendant après qu'il ait été gelé et en copiant tout l'arbre des fils.

Test1 [Eclipse Application] 
org.eclipse.equinox.launcher.Main at localhost:54840 (Suspended)  
    Daemon System Thread [Finalizer] (Suspended)  
     Object.wait(long) line: not available [native method] 
     ReferenceQueue<T>.remove(long) line: 120  
     ReferenceQueue<T>.remove() line: 136  
     Finalizer$FinalizerThread.run() line: 159 
    Daemon System Thread [Reference Handler] (Suspended)  
     Object.wait(long) line: not available [native method] 
     Reference$Lock(Object).wait() line: 474 
     Reference$ReferenceHandler.run() line: 116 
    Thread [main] (Suspended) 
    Daemon System Thread [Signal Dispatcher] (Suspended)  
    Daemon Thread [Thread-0] (Suspended)  
     OS.CFRunLoopRunInMode(int, double, boolean) line: not available [native method] 
     Display.sleep() line: 3902 
     IDEWorkbenchAdvisor(WorkbenchAdvisor).eventLoopIdle(Display) line: 364 
     Workbench.runEventLoop(Window$IExceptionHandler, Display) line: 2383  
     Workbench.runUI() line: 2346  
     Workbench.access$4(Workbench) line: 2198  
     Workbench$5.run() line: 493 
     Realm.runWithDefault(Realm, Runnable) line: 288 
     Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 488  
     PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149 
     IDEApplication.start(IApplicationContext) line: 113 
     EclipseAppHandle.run(Object) line: 193 
     EclipseAppLauncher.runApplication(Object) line: 110 
     EclipseAppLauncher.start(Object) line: 79 
     EclipseStarter.run(Object) line: 386  
     EclipseStarter.run(String[], Runnable) line: 179  
     NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] 
     NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 
     DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 
     Method.invoke(Object, Object...) line: 585 
     Main.invokeFramework(String[], URL[]) line: 549 
     Main.basicRun(String[]) line: 504 
     Main.run(String[]) line: 1236 
     Main.main(String[]) line: 1212 
    Daemon Thread [State Data Manager] (Suspended) 
     Thread.sleep(long) line: not available [native method] 
     StateManager.run() line: 297  
     Thread.run() line: 613 
    Daemon Thread [Framework Event Dispatcher] (Suspended) 
     Object.wait(long) line: not available [native method] 
     EventManager$EventThread(Object).wait() line: 474 
     EventManager$EventThread.getNextEvent() line: 377 
     EventManager$EventThread.run() line: 317  
    Daemon Thread [Start Level Event Dispatcher] (Suspended)  
     Object.wait(long) line: not available [native method] 
     EventManager$EventThread(Object).wait() line: 474 
     EventManager$EventThread.getNextEvent() line: 377 
     EventManager$EventThread.run() line: 317  
    Thread [Worker-0] (Suspended) 
     Object.wait(long) line: not available [native method] 
     WorkerPool.sleep(long) line: 185  
     WorkerPool.startJob(Worker) line: 217 
     Worker.run() line: 51 
    Daemon Thread [Java indexing] (Suspended) 
     Object.wait(long) line: not available [native method] 
     IndexManager(Object).wait() line: 474 
     IndexManager(JobManager).run() line: 371  
     Thread.run() line: 613 
    Thread [Worker-1] (Suspended) 
     Object.wait(long) line: not available [native method] 
     WorkerPool.sleep(long) line: 185  
     WorkerPool.startJob(Worker) line: 217 
     Worker.run() line: 51 
    Thread [Worker-2] (Suspended) 
     Object.wait(long) line: not available [native method] 
     WorkerPool.sleep(long) line: 185  
     WorkerPool.startJob(Worker) line: 217 
     Worker.run() line: 51 

Répondre

2

Désolé de déranger tout le monde ... a eu le problème.

Mon problème était simple: un de mes gestionnaires d'actions a lancé une exception dans la méthode Dispose. Cela provoque le blocage de l'intégralité de l'espace de travail.

+0

comment avez-vous découvert? L'exception a-t-elle été enregistrée quelque part? – chris

Questions connexes