Oh, I apologize. the poor formatting of my email client caused me to misread your code sample.
On Mon, Nov 18, 2013 at 3:01 PM, Viral Barot <vba...@tibco.com> wrote: > I am calling the invokeAndWait from Main thread. > > On Nov 18, 2013, at 2:58 PM, Mike Murray <ashesf...@gmail.com> > wrote: > > This is a developer error. You can't call invoke and wait from an event > method because invoke and wait puts your new runnable on the queue but > since you are waiting from the queue itself it hangs. You need to comb your > codebase and deal with this issue. These invoke methods are to be used > outside the AWT dispatch thread. > > -m > > > On Mon, Nov 18, 2013 at 2:51 PM, Viral Barot <vba...@tibco.com> wrote: > >> Accessing AWT frame from a thread causes the application to freeze when >> executed with JRE 7. The AWT frame is created with SWT_AWT bridge. >> >> Below is the test case in which call to frame.setVisible(true); from the >> AWT event dispatching thread does not return. >> >> Test Case: >> import java.awt.Button; >> import java.awt.Color; >> import java.awt.event.ActionEvent; >> import java.awt.event.ActionListener; >> import java.lang.reflect.InvocationTargetException; >> >> import javax.swing.JOptionPane; >> import javax.swing.SwingUtilities; >> >> import org.eclipse.swt.SWT; >> import org.eclipse.swt.awt.SWT_AWT; >> import org.eclipse.swt.layout.GridLayout; >> import org.eclipse.swt.widgets.Display; >> import org.eclipse.swt.widgets.Shell; >> import org.eclipse.swt.widgets.Composite; >> >> public class Main { >> >> public static void main(String[] args) { >> >> >> >> if(System.getProperty("os.name").toLowerCase().startsWith("mac")){ >> SWT_AWT.embeddedFrameClass = "sun.lwawt.macosx.CViewEmbeddedFrame"; >> } >> >> >> Display display = new Display(); >> Shell shell = new Shell(display); >> shell.setText("Shell"); >> shell.setSize(200, 200); >> >> shell.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE)); >> >> >> >> final Composite composite = new Composite(shell, SWT.EMBEDDED); >> GridLayout gridLayout = new GridLayout(); >> gridLayout.numColumns = 1; >> composite.setLayout(gridLayout); >> composite.setSize(200,200); >> >> composite.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); >> >> >> >> final java.awt.Frame frame = SWT_AWT.new_Frame(composite); >> frame.setVisible(false); >> frame.setBackground(Color.red); >> frame.setSize(200, 200); >> Button button = new Button("Submit"); >> button.addActionListener(new ActionListener() { >> >> >> @Override >> public void actionPerformed(ActionEvent e) { >> >> >> JOptionPane.showMessageDialog(null, "Hello"); >> } >> }); >> frame.add(button); >> frame.doLayout(); >> >> >> >> try { >> SwingUtilities.invokeAndWait(new Runnable() { >> >> >> @Override >> public void run() { >> frame.setVisible(true); >> } >> }); >> } catch (InterruptedException e1) { >> e1.printStackTrace(); >> } catch (InvocationTargetException e1) { >> e1.printStackTrace(); >> } >> shell.open(); >> >> >> >> while (!shell.isDisposed()) { >> if (!display.readAndDispatch()) >> display.sleep(); >> } >> display.dispose(); >> >> >> >> } >> } >> >> Below is the thread dump for this. >> >> "AWT-EventQueue-0" prio=5 tid=0x00007f8d0b087000 nid=0x8703 runnable >> [0x0000000195e40000] >> java.lang.Thread.State: RUNNABLE >> at sun.lwawt.macosx.CCursorManager.nativeGetCursorPosition(Native Method) >> at >> sun.lwawt.macosx.CCursorManager.getCursorPosition(CCursorManager.java:54) >> at sun.lwawt.LWCursorManager.updateCursorImpl(LWCursorManager.java:79) >> at sun.lwawt.LWCursorManager.updateCursor(LWCursorManager.java:56) >> at >> sun.lwawt.LWComponentPeer.updateCursorImmediately(LWComponentPeer.java:852) >> at java.awt.Component.updateCursorImmediately(Component.java:3123) >> at java.awt.Component.show(Component.java:1626) >> - locked <0x0000000160c5b8c8> (a java.awt.Component$AWTTreeLock) >> at java.awt.Window.show(Window.java:1042) >> at sun.awt.EmbeddedFrame.show(EmbeddedFrame.java:179) >> at java.awt.Component.show(Component.java:1651) >> at java.awt.Component.setVisible(Component.java:1603) >> at java.awt.Window.setVisible(Window.java:1014) >> at Main$2.run(Main.java:60) >> at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:241) >> at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) >> at java.awt.EventQueue.access$200(EventQueue.java:103) >> at java.awt.EventQueue$3.run(EventQueue.java:694) >> at java.awt.EventQueue$3.run(EventQueue.java:692) >> at java.security.AccessController.doPrivileged(Native Method) >> at >> java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) >> at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) >> at >> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) >> at >> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) >> at >> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) >> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) >> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) >> at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) >> >> Locked ownable synchronizers: >> - None >> >> While in the above test case if invokeLater is called instead of >> invokeAndWait, the test case runs fine. But in my application the >> invokeLater calls also freeze at same location. >> >> This behavoir happens with SWT 3.7.2 as well as 4.3. >> >> >> >> >> > > > -- > > -------------------------------------------------------------------------------------- > Disco Mike - Amphicoelous (Original Mix) > Now available on Beatport > Buy it now at: http://btprt.dj/WeaNGz > > > -- -------------------------------------------------------------------------------------- Disco Mike - Amphicoelous (Original Mix) Now available on Beatport Buy it now at: http://btprt.dj/WeaNGz