2011-07-14 29 views
2

我正在嘗試使用JUnit和FEST編寫一些GUI和集成測試。 以下是我有:Thread.sleep(時間)與robot.wait(時間)

@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時沒有得到相同的例外情況?

回答

5

您正在致電Object.wait() - 這是不是Thread.sleep()相同。特別是:

  • wait()需要你已經擁有你怎麼稱呼它在
  • wait()對象監視器允許線程通知(通過Object.notify/notifyAll)和早醒; Thread.sleep()將要求線程被中斷。
0

wait()方法與notify()方法一起使用來同步線程。它是而不是用於在給定的線程中延遲一段時間。

因爲要在線程上輸入wait(),您必須首先使用該線程的監視器(通過某種​​塊或方法),才能得到該異常。使用Thread.sleep()

0

也許你正在尋找

robot.delay(...); 
+0

我使用[FEST(http://easytesting.org/swing/apidocs/index.html)來訪問機器人。我使用哪一個是否重要? –

+0

啊,FEST與java.awt [Robot](http:// download)有不同的[Robot](http://easytesting.org/swing/apidocs/org/fest/swing/core/Robot.html)API。 .oracle.com/javase/6/docs/api/java/awt/Robot.html) – Atreys

+0

對不起,我錯過了這一點。 – camickr