2009-03-06 8 views
1

Я разрабатываю свой собственный плагин Eclipse и сталкивался с очень странным поведением. В некоторых очень конкретных случаях Eclipse не будет закрываться, когда я закрою верстак. Он просто остается висящим, пока я не убью этот процесс. Это происходит при запуске через PDE и при запуске в качестве обычной установки.Eclipse не уйдет с моим плагином

Настоятельно сложно предоставить более подробную информацию, и я знаю, что это очень общий вопрос. Тем не менее, мне было интересно, если кто-нибудь столкнулся с таким поведением и может поделиться решением.

Спасибо. Zviki

PS. Я привязываю трассировки стека всех запущенных потоков после того, как верстак закрывается. Может, что-то выскочит. Эта трассировка была достигнута за счет запуска среды IDE в режиме отладки, приостановки ее после ее замораживания и копирования всего дерева нитей.

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 

ответ

2

Извините, что беспокою всех ... возникла проблема.

Моя проблема была простой: один из моих обработчиков действий бросил исключение в методе Dispose. Это приводит к зависанию всего рабочего пространства.

+0

Как вы узнали? было ли какое-то исключение зарегистрировано где-то? – chris