I'm developing my own Eclipse plugin and came across a very strange behavior. In some very specific cases, Eclipse won't quit when I close the workbench. It just stays hanging until I kill the process. This happens when running through PDE and when running as a regular installation.
我正在开发自己的Eclipse插件,并遇到了一个非常奇怪的行为。在某些非常特殊的情况下,Eclipse在关闭工作台时不会退出。它一直悬挂,直到我杀死这个过程。在通过PDE运行和作为常规安装运行时会发生这种情况。
It is really hard to provide more details and I know that it is a very generic question. Yet, I was wondering if anyone encountered such behavior and could share the solution.
提供更多细节真的很难,我知道这是一个非常通用的问题。然而,我想知道是否有人遇到过这种行为并且可以分享解决方案。
Thanks. Zviki
PS. I'm attaching stack traces of all the running threads after the workbench is quit. Maybe something will pop out. This trace was achieved by running the IDE in debug mode, suspending it after it got frozen and copying all the threads tree.
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 个解决方案
#1
Sorry to bother everybody... got the problem.
很抱歉打扰所有人......得到了问题。
My problem was simple: one of my Action Handlers threw an exception in the Dispose method. This causes the entire workspace to hang.
我的问题很简单:我的一个Action Handler在Dispose方法中引发了一个异常。这会导致整个工作区挂起。
#1
Sorry to bother everybody... got the problem.
很抱歉打扰所有人......得到了问题。
My problem was simple: one of my Action Handlers threw an exception in the Dispose method. This causes the entire workspace to hang.
我的问题很简单:我的一个Action Handler在Dispose方法中引发了一个异常。这会导致整个工作区挂起。