Community
Participate
Working Groups
Hi, I have an application that works fine in eclipse 3.6 and 3.7 but freezes in Eclipse 4.2.1 The problem is that application "freeze" when executes PlatformUI's createAndRunWorkbench method. My custom code: Display vDisplay = PlatformUI.createDisplay(); WorkbenchAdvisor vWorkbenchAdvisor = new ABSBuildWorkbenchAdvisor(); PlatformUI.createAndRunWorkbench(vDisplay, vWorkbenchAdvisor); Here other java statements of my application After a deep debug, I've see that the problem is at line 588 of Workbench class: // run the e4 event loop and instantiate ... well, stuff e4Workbench.createAndRunUI(e4Workbench.getApplication()); During debug I've see that createAndRunUI never ends its execution. My application continues its execution only when I close manually the Eclipse's gui that seems to be "freezed". In eclipse 3.6 and eclipse 3.7 my application continues its run without that I have to close manually to Eclipse's gui. Here all thread's dump take using visualvm: 2012-10-17 16:25:04 "Attach Listener" - Thread t@5 java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Bundle File Closer" - Thread t@20 java.lang.Thread.State: WAITING at java.lang.Object.wait(Native Method) - waiting on <2ee28063> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336) Locked ownable synchronizers: - None "Finalizer" - Thread t@3 java.lang.Thread.State: WAITING at java.lang.Object.wait(Native Method) - waiting on <18ada729> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) Locked ownable synchronizers: - None "Framework Active Thread" - Thread t@14 java.lang.Thread.State: TIMED_WAITING at java.lang.Object.wait(Native Method) - waiting on <76737f58> (a org.eclipse.osgi.framework.internal.core.Framework) at org.eclipse.osgi.framework.internal.core.Framework.run(Framework.java:1862) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "Framework Event Dispatcher" - Thread t@17 java.lang.Thread.State: WAITING at java.lang.Object.wait(Native Method) - waiting on <185afba1> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336) Locked ownable synchronizers: - None "JMX server connection timeout 36" - Thread t@36 java.lang.Thread.State: TIMED_WAITING at java.lang.Object.wait(Native Method) - waiting on <592c34b> (a [I) at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:150) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "Provisioning Event Dispatcher" - Thread t@26 java.lang.Thread.State: WAITING at java.lang.Object.wait(Native Method) - waiting on <5fd0f0db> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336) Locked ownable synchronizers: - None "RMI Scheduler(0)" - Thread t@35 java.lang.Thread.State: TIMED_WAITING at sun.misc.Unsafe.park(Native Method) - parking to wait for <665373c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025) at java.util.concurrent.DelayQueue.take(DelayQueue.java:164) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "RMI TCP Accept-0" - Thread t@12 java.lang.Thread.State: RUNNABLE at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408) - locked <106a15d> (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:462) at java.net.ServerSocket.accept(ServerSocket.java:430) at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34) at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369) at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "RMI TCP Connection(1)-172.20.40.81" - Thread t@34 java.lang.Thread.State: RUNNABLE at sun.management.ThreadImpl.dumpThreads0(Native Method) at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:427) at sun.reflect.GeneratedMethodAccessor54.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:167) at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:96) at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:33) at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:208) at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:120) at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:262) at javax.management.StandardMBean.invoke(StandardMBean.java:391) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761) at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1427) at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72) at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1265) at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1360) at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788) at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303) at sun.rmi.transport.Transport$1.run(Transport.java:159) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:155) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - locked <5e35512c> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) "Reference Handler" - Thread t@2 java.lang.Thread.State: WAITING at java.lang.Object.wait(Native Method) - waiting on <30b98167> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:485) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) Locked ownable synchronizers: - None "Signal Dispatcher" - Thread t@4 java.lang.Thread.State: RUNNABLE Locked ownable synchronizers: - None "Start Level Event Dispatcher" - Thread t@19 java.lang.Thread.State: WAITING at java.lang.Object.wait(Native Method) - waiting on <54eb840f> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336) Locked ownable synchronizers: - None "Thread-4" - Thread t@33 java.lang.Thread.State: WAITING at java.lang.Object.wait(Native Method) - waiting on <70d683f3> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at org.tmatesoft.svn.core.javahl.SVNClientImplTracker.run(SVNClientImplTracker.java:65) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "Worker-1" - Thread t@27 java.lang.Thread.State: TIMED_WAITING at java.lang.Object.wait(Native Method) - waiting on <13710065> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50) Locked ownable synchronizers: - None "Worker-2" - Thread t@30 java.lang.Thread.State: TIMED_WAITING at java.lang.Object.wait(Native Method) - waiting on <13710065> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50) Locked ownable synchronizers: - None "Worker-JM" - Thread t@24 java.lang.Thread.State: WAITING at java.lang.Object.wait(Native Method) - waiting on <e74eb02> (a java.util.ArrayList) at org.eclipse.core.internal.jobs.InternalWorker.run(InternalWorker.java:58) Locked ownable synchronizers: - None "[ThreadPool Manager] - Idle Thread" - Thread t@38 java.lang.Thread.State: WAITING at java.lang.Object.wait(Native Method) - waiting on <29ed4306> (a org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor) at java.lang.Object.wait(Object.java:485) at org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:106) Locked ownable synchronizers: - None "[Timer] - Main Queue Handler" - Thread t@23 java.lang.Thread.State: TIMED_WAITING at java.lang.Object.wait(Native Method) - waiting on <1df0d7b8> (a java.lang.Object) at org.eclipse.equinox.internal.util.impl.tpt.timer.TimerImpl.run(TimerImpl.java:141) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "main" - Thread t@1 java.lang.Thread.State: RUNNABLE at org.eclipse.swt.internal.win32.OS.WaitMessage(Native Method) at org.eclipse.swt.widgets.Display.sleep(Display.java:4656) at org.eclipse.ui.application.WorkbenchAdvisor.eventLoopIdle(WorkbenchAdvisor.java:364) at org.eclipse.ui.internal.Workbench$3.eventLoopIdle(Workbench.java:462) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1033) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:923) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at abscmd.ABSBuildApp.start(ABSBuildApp.java:73) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) at org.eclipse.equinox.launcher.Main.run(Main.java:1438) at org.eclipse.equinox.launcher.Main.main(Main.java:1414) Locked ownable synchronizers: - None
createAndRunWorkbench(*) should run until the GUI is closed. Do you mean there's something in ABSBuildWorkbenchAdvisor that should cause it to exit right away? PW
Hi Paul. My application contains these statements: Display vDisplay = PlatformUI.createDisplay(); WorkbenchAdvisor vWorkbenchAdvisor = new ABSBuildWorkbenchAdvisor(); PlatformUI.createAndRunWorkbench(vDisplay, vWorkbenchAdvisor); java statement 1 java statement 2 ... java statement n Using eclipse 3.6 and 3.7 my application continues its run; that means that are executed also java statement1, 2 ...n without closing manually the GUI. That's for me is fine. Using eclipse 4.2.1 is necessary to close the gui to see that java statement 1,2 .... n are executed. Without closing manually the gui the execution is freezed in PlatformUI.createAndRunWorkbench method. That's for me is a bug because is changed the behavior. Two word about my system: I have developed a java code generator that generates the java code starting from some .xml files. My generator is used in two different ways: 1) By an Eclipse plugin : during the day developers use this plugin to generate the code, in other words: the plugin uses the generator. This In Eclipse 4.2.1 works fine. 2) As an Eclipse application: this is useful only to have the "nightly builds". A scheduled process during the night starts the application to generate the code of all users. The application uses the same generator used by Plugin to generate the code. Point 2 works fine in Eclipse 3.6 and 3.7, but freezes in 4.2.1 during PlatformUI.createAndRunWorkbench method call. Regards
Yes, I need to understand what part of your application requires createAndRunWorkbench(*) to exit. It won't by itself. That's why I asked about ABSBuildWorkbenchAdvisor PW
The generator requires createAndRunWorkbench to exit. Note that the generator is not a part of the application, application has simply to invoke it to start the code generator. Please, look my example and my explanation I have post before, I thinh that's rather clear.
Excuse me, I attach the Advisor code public class ABSBuildWorkbenchAdvisor extends WorkbenchAdvisor { public ABSBuildWorkbenchAdvisor() { super(); } /* * (non-Javadoc) * * @see org.eclipse.ui.application.WorkbenchAdvisor#openWindows() */ @Override public boolean openWindows() { return false; } @Override public String getInitialWindowPerspectiveId() { return "absplugin.ABSPerspective"; } }
We don't honour advisor.openWindows() in org.eclipse.ui.internal.Workbench.init() any more, and we need a way to propagate a false to the Eclipse4 event loop PW
Hi, why this bug is still opened? A part of our plugin does not works without your fix and so we can not move our customers to use Eclipse 4.x. Please, consider to fix this problem, if very important for us.
No one is looking at this at the moment, but I'd consider a contribution: http://wiki.eclipse.org/Platform_UI/How_to_Contribute PW
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet. As such, we're closing this bug. If you have further information on the current state of the bug, please add it and reopen this bug. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant. -- The automated Eclipse Genie.