2

我正在尝试使用 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();
    }
}

robot并且args已经初始化。

为什么我打电话时会出现这样的异常wait?为什么我打电话时没有得到同样的异常sleep

4

3 回答 3

4

您正在调用Object.wait()-Thread.sleep(). 尤其是:

  • wait()要求您已经拥有调用它的对象上的监视器
  • wait()允许线程被通知(通过Object.notify/ notifyAll)并提前唤醒;Thread.sleep()将需要中断线程。
于 2011-07-14T14:47:36.040 回答
0

也许你正在寻找

robot.delay(...);
于 2011-07-14T14:57:34.983 回答
0

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

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

使用Thread.sleep().

于 2011-07-14T14:47:55.953 回答