Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.awt.Robot.waitForIdle()不可靠_Java_Testing_Awtrobot - Fatal编程技术网

java.awt.Robot.waitForIdle()不可靠

java.awt.Robot.waitForIdle()不可靠,java,testing,awtrobot,Java,Testing,Awtrobot,我们在每晚的UI测试中经常看到时间问题。测试经常失败,因为在测试代码尝试验证结果之前,java.awt.Robot执行的事件尚未完成 我们的代码类似于使用: Point p = cb.getLocationOnScreen(); int m = 5; if (cb.getWidth()<5||cb.getHeight()<5) m=3; System.out.println("Click at " + (p.x+m) + "," + (p.y+m)); robot.mouse

我们在每晚的UI测试中经常看到时间问题。测试经常失败,因为在测试代码尝试验证结果之前,java.awt.Robot执行的事件尚未完成

我们的代码类似于使用:

Point p = cb.getLocationOnScreen();
int m = 5;
if (cb.getWidth()<5||cb.getHeight()<5)
    m=3;
System.out.println("Click at " + (p.x+m) + "," + (p.y+m));
robot.mouseMove(p.x + m, p.y + m);
robot.mousePress(MouseEvent.BUTTON1_MASK);
robot.mouseRelease(MouseEvent.BUTTON1_MASK);
robot.waitForIdle();
Thread.sleep(100);
// Verify results...
点p=cb.getLocationOnScreen();
int m=5;

如果(cb.getWidth()我得出结论,我确实需要使用SunToolkit.realSync(),而且它似乎也能正确地用于Java9

看起来,尽管我找不到任何确凿的证据,realSync()会等待所有与图形相关的线程,而Robot.waitForIdle()和SwingUntilities.invokeLater()只会等待Java事件线程完成它的工作


如果有人提出了更好的答案,我会接受这个答案,而不是我的答案。

您尝试过将设置为“开”吗?我不确定是否看到AutoWaitForIdle和手动调用waitForIdle()之间的区别。可能没有,只是一个粗略的猜测。可能值得一试。=)如果这不起作用,并且您不信任
Robot.waitForIdle
,您可以使用
SwingUtilities.invokeLater
从可运行的计划中执行“验证结果”。Runnable放在事件调度队列上,应该在队列上的所有内容之后进行处理。我的回答不被接受,因为今天,在Java 1.7 realSync()下挂起。不知道为什么,因为我对代码没有可见性。