Thread.sleep(时间)与robot.wait(时间)

时间:2011-07-14 14:44:06

标签: java multithreading exception awtrobot fest

我正在尝试使用JUnit和FEST编写一些GUI和集成测试。 这就是我所拥有的:

@Before
public void setUp(){
    try{
        program.main(args);
        robot.wait(30000);    //gives IllegalMonitorStateException
        Thread.sleep(30000);  //no Exception occurs here
    } catch (Exception e){
        e.printStackTrace();
    }
}

robotargs已初始化。

为什么在拨打wait时会收到这样的例外?当我拨打sleep时,为什么我没有得到相同的例外?

3 个答案:

答案 0 :(得分:4)

您正在呼叫Object.wait() - Thread.sleep()相同。特别是:

  • wait()要求您已在您调用它的对象上拥有监视器
  • wait()允许线程通知(通过Object.notify / notifyAll)并提前唤醒; Thread.sleep()会要求线程被中断。

答案 1 :(得分:0)

wait()方法与notify()方法结合使用以同步线程。 用于延迟给定线程一段时间。

你得到了那个例外,因为为了线程上的wait(),你必须首先使用该线程的监视器(通过某种synchronized块或方法)。

使用Thread.sleep()

答案 2 :(得分:0)

也许您正在寻找

robot.delay(...);