Robot.java (waitForIdle): Call invokeAndWait on an empty Runnable.
authorThomas Fitzsimmons <fitzsim@redhat.com>
Tue, 22 Feb 2005 06:18:59 +0000 (06:18 +0000)
committerThomas Fitzsimmons <fitzsim@gcc.gnu.org>
Tue, 22 Feb 2005 06:18:59 +0000 (06:18 +0000)
2005-02-22  Thomas Fitzsimmons  <fitzsim@redhat.com>

* java/awt/Robot.java (waitForIdle): Call invokeAndWait on an
empty Runnable.

From-SVN: r95384

libjava/ChangeLog
libjava/java/awt/Robot.java

index 904e5b828abf04204620cdcbf6e5711140fde08e..03aebc67d93b7c42787ac69c32a5f031395446e4 100644 (file)
@@ -1,5 +1,8 @@
 2005-02-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
 
+       * java/awt/Robot.java (waitForIdle): Call invokeAndWait on an
+       empty Runnable.
+
        PR libgcj/17952:
        * gnu/java/awt/peer/gtk/GtkWindowPeer.java,
        jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
index 49726c8a1921015c64434774927ac3471a6e8412..23b6f8104426b8d4cfecf15c84ba441d795f5fcd 100644 (file)
@@ -40,6 +40,7 @@ package java.awt;
 
 import gnu.java.awt.ClasspathToolkit;
 
+import java.lang.reflect.InvocationTargetException;
 import java.awt.event.InputEvent;
 import java.awt.image.BufferedImage;
 import java.awt.peer.RobotPeer;
@@ -53,8 +54,8 @@ import java.awt.peer.RobotPeer;
  *
  * Since Robot generates native windowing system events, rather than
  * simply inserting {@link AWTEvents} on the AWT event queue, its use
- * is not restricted to Java programs.  It can be to programatically
- * drive any graphical application.
+ * is not restricted to Java programs.  It can be used to
+ * programatically drive any graphical application.
  *
  * This implementation requires an X server that supports the XTest
  * extension.
@@ -384,7 +385,8 @@ public class Robot
   }
 
   /**
-   * Wait until the event dispatch thread is idle.
+   * Wait until all events currently on the event queue have been
+   * dispatched.
    */
   public void waitForIdle ()
   {
@@ -393,17 +395,17 @@ public class Robot
                                             + "the event dispatch thread");
 
     EventQueue q = Toolkit.getDefaultToolkit ().getSystemEventQueue ();
-
-    while (q.peekEvent () != null)
+    try
+      {
+       q.invokeAndWait (new Runnable () { public void run () { } });
+      }
+    catch (InterruptedException e)
+      {
+       System.err.println ("Robot: waitForIdle interrupted");
+      }
+    catch (InvocationTargetException e)
       {
-       try
-         {
-           wait ();
-         }
-       catch (InterruptedException e)
-         {
-           System.err.println ("Robot: waitForIdle interrupted");
-         }
+       System.err.println ("Robot: waitForIdle cannot invoke target");
       }
   }