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();
    }
}

robotargsすでに初期化されています。

電話をかけると、なぜこのような例外が発生するのwaitですか?電話をかけたときに同じ例外が発生しないのはなぜsleepですか?

4

3 に答える 3

4

あなたが呼んでいるObject.wait()-これはと同じではありませんThread.sleep()。特に:

  • wait()呼び出すオブジェクトのモニターを既に所有している必要があります
  • wait()Object.notifyスレッドが( /を介してnotifyAll)通知され、早起きできるようにします。Thread.sleep()スレッドを中断する必要があります。
于 2011-07-14T14:47:36.040 に答える
0

このメソッドは、スレッドを同期するwait()ためのメソッドと組み合わせて使用​​されます。特定のスレッドで一定時間遅延するために使用されるnotify()ことはありません。

wait()スレッドをオンにするには、最初にそのスレッドのモニターを(ある種のsynchronizedブロックまたはメソッドを介して)取得する必要があるため、この例外が発生します。

を使用しThread.sleep()ます。

于 2011-07-14T14:47:55.953 に答える
0

多分あなたは探しています

robot.delay(...);
于 2011-07-14T14:57:34.983 に答える