我正在尝试使用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
时没有得到相同的异常?
您正在调用Object.wait()
-这是不与Thread.sleep()
相同。特别是:
-
wait()
要求您已经拥有在 上调用它的对象上的监视器。 -
wait()
允许线程被通知(通过Object.notify
/notifyAll
)并提前唤醒;Thread.sleep()
将要求线程被中断。
wait()
方法与notify()
方法一起用于同步线程。而不是用于在给定线程中延迟一段时间。
你得到这个异常,因为为了在一个线程上wait()
,你必须首先采取该线程的监视器(通过某种synchronized
块或方法)。
使用Thread.sleep()
也许你正在寻找
robot.delay(...);