Re: Outside of the EDT: JOptionPane.showMessageDialog
On 12/27/2012 7:53 AM, Stefan Ram wrote:
"John B. Matthews" <nospam@nospam.invalid> writes:
I'd say no. If the dialog is not constructed on the EDT, then
I the meantime, I also started to see it this way. So, then
public static void main( final java.lang.String args[] )
{ final java.lang.String name = JOptionPane.showInputDialog
( "Hi, what's your name?" ); /* ... */ }
is no good idea in a beginner's book (I saw something like
this in a Java textbook from 2011).
I was curious to see if calling JOptionPane.showMessageDialog() would
start the EDT and in fact it does. Below are the AWT-EventQueue-0
thread traces from jconsole. I don't really know what they mean but
they are slightly different depending on whether the call was put on the
EDT.
I'll tell you that I always wrap any calls to JOptionPane.show... in
EventQueue.invokeLater if I'm not already on the EDT. I don't know that
it matters but I can't find any documentation anywhere that says you
don't need to do that.
I think I'm going to go look through the source again and see if I can
find where the EDT gets started.
import javax.swing.*;
public class test6 {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null,"test6");
}
}
Name: AWT-EventQueue-0
State: WAITING on
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@baecb8
Total blocked: 6 Total waited: 8
Stack trace:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown
Source)
java.awt.EventQueue.getNextEvent(Unknown Source)
java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
java.awt.WaitDispatchSupport$2.run(Unknown Source)
java.awt.event.InvocationEvent.dispatch(Unknown Source)
java.awt.EventQueue.dispatchEventImpl(Unknown Source)
java.awt.EventQueue.access$200(Unknown Source)
java.awt.EventQueue$3.run(Unknown Source)
java.awt.EventQueue$3.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
java.awt.EventQueue.dispatchEvent(Unknown Source)
java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
java.awt.EventDispatchThread.pumpEvents(Unknown Source)
java.awt.EventDispatchThread.pumpEvents(Unknown Source)
java.awt.EventDispatchThread.run(Unknown Source)
import java.awt.*;
import javax.swing.*;
public class test6 {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(null,"test6");
}
});
}
}
Name: AWT-EventQueue-0
State: WAITING on
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@448192
Total blocked: 3 Total waited: 8
Stack trace:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown
Source)
java.awt.EventQueue.getNextEvent(Unknown Source)
java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
java.awt.WaitDispatchSupport$2.run(Unknown Source)
java.awt.WaitDispatchSupport$4.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.awt.WaitDispatchSupport.enter(Unknown Source)
java.awt.Dialog.show(Unknown Source)
javax.swing.JOptionPane.showOptionDialog(Unknown Source)
javax.swing.JOptionPane.showMessageDialog(Unknown Source)
javax.swing.JOptionPane.showMessageDialog(Unknown Source)
javax.swing.JOptionPane.showMessageDialog(Unknown Source)
test6$1.run(test6.java:8)
java.awt.event.InvocationEvent.dispatch(Unknown Source)
java.awt.EventQueue.dispatchEventImpl(Unknown Source)
java.awt.EventQueue.access$200(Unknown Source)
java.awt.EventQueue$3.run(Unknown Source)
java.awt.EventQueue$3.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
java.awt.EventQueue.dispatchEvent(Unknown Source)
java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
java.awt.EventDispatchThread.pumpEvents(Unknown Source)
java.awt.EventDispatchThread.pumpEvents(Unknown Source)
java.awt.EventDispatchThread.run(Unknown Source)
--
Knute Johnson