2009-03-06 22 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

皆さん大変申し訳ございません...問題があります。

私の問題は単純でした。私のAction Handlerの1人がDisposeメソッドで例外を投げました。これにより、ワークスペース全体がハングします。

+0

あなたはどのようにして見つけましたか?どこかに例外が記録されましたか? – chris