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

Reply via email to