我正在开发自己的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
答案 0 :(得分:2)
很抱歉打扰所有人......得到了问题。
我的问题很简单:我的一个Action Handler在Dispose方法中引发了一个异常。这会导致整个工作区挂起。