我正在尝试使用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
时,为什么我没有得到相同的例外?
答案 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(...);