src/java.desktop/share/classes/java/awt/Robot.java
Print this page
@@ -32,13 +32,16 @@
import java.awt.image.DirectColorModel;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import java.awt.peer.RobotPeer;
import java.lang.reflect.InvocationTargetException;
+import java.security.AccessController;
+
import sun.awt.AWTPermissions;
import sun.awt.ComponentFactory;
import sun.awt.SunToolkit;
+import sun.awt.OSInfo;
import sun.awt.image.SunWritableRaster;
/**
* This class is used to generate native system input events
* for the purposes of test automation, self-running demos, and
@@ -548,31 +551,21 @@
throw new IllegalArgumentException("Delay must be to 0 to 60,000ms");
}
}
/**
- * Waits until all events currently on the event queue have been processed.
+ * Waits until all events currently on the event queue have been processed and tries
+ * to synchronize with the native windowing sub-system.
* @throws IllegalThreadStateException if called on the AWT event dispatching thread
*/
public synchronized void waitForIdle() {
checkNotDispatchThread();
- // post a dummy event to the queue so we know when
- // all the events before it have been processed
- try {
SunToolkit.flushPendingEvents();
- EventQueue.invokeAndWait( new Runnable() {
- public void run() {
- // dummy implementation
- }
- } );
- } catch(InterruptedException ite) {
- System.err.println("Robot.waitForIdle, non-fatal exception caught:");
- ite.printStackTrace();
- } catch(InvocationTargetException ine) {
- System.err.println("Robot.waitForIdle, non-fatal exception caught:");
- ine.printStackTrace();
- }
+
+ // 7185258: realSync() call blocks all DnD tests on OS X
+ if (AccessController.doPrivileged(OSInfo.getOSTypeAction()) != OSInfo.OSType.MACOSX)
+ ((SunToolkit) Toolkit.getDefaultToolkit()).realSync();
}
private void checkNotDispatchThread() {
if (EventQueue.isDispatchThread()) {
throw new IllegalThreadStateException("Cannot call method from the event dispatcher thread");