2011-07-14 8 views
2

私はJUnitとFESTを使っていくつかのGUIと統合テストを書こうとしています。Thread.sleep(time)vs. robot.wait(time)

@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()では、すでにあなたは(Object.notify/notifyAll経由)スレッドが通知を受けることができます
  • wait()にそれを呼び出すと、早起きオブジェクトのモニターを所有していることが必要です。 Thread.sleep()はスレッドに割り込む必要があります。
0

wait()メソッドは、スレッドを同期させる方法と一緒に使用されます。ある程度の時間、特定のスレッドで遅延させるには、ではなく、です。

スレッドでwait()を実行するには、そのスレッドのモニタを先に(ある種の​​ブロックまたはメソッドを使用して)実行している必要があります。

Thread.sleep()を使用してください。

0

たぶん、あなたは私がロボットにアクセスするには、[FEST](http://easytesting.org/swing/apidocs/index.html)を使用してい

robot.delay(...); 
+0

を探しています。私はどちらを使うの? –

+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