Вопрос

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

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

Спасибо.Звики

ПС.Я прилагаю трассировки стека всех запущенных потоков после выхода из рабочей среды.Возможно, что-то вылезет наружу.Эта трассировка была достигнута путем запуска 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   
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top