Затмение не выйдет из моего плагина
Я разрабатываю свой собственный плагин Eclipse и столкнулся с очень странным поведением. В некоторых особых случаях Eclipse не завершает работу, когда я закрываю рабочую среду. Он просто висит, пока я не убью процесс. Это происходит при запуске через PDE и при обычной установке.
Очень сложно предоставить больше деталей, и я знаю, что это очень общий вопрос. Тем не менее, мне было интересно, если кто-нибудь сталкивался с таким поведением и мог бы поделиться решением.
Благодарю. 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
1 ответ
Извините, что беспокою всех... есть проблема.
Моя проблема была проста: один из моих обработчиков действий выдал исключение в методе Dispose. Это приводит к зависанию всего рабочего пространства.