Thread.sleep (время) против robot.wait (время) - PullRequest
2 голосов
/ 14 июля 2011

Я пытаюсь написать несколько тестов графического интерфейса и интеграции с использованием JUnit и FEST.Вот что у меня есть:

@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?

Ответы [ 3 ]

4 голосов
/ 14 июля 2011

Вы звоните Object.wait() - что не совпадает с Thread.sleep(). В частности:

  • wait() требует, чтобы у вас уже был монитор на объекте, для которого он вызывается
  • wait() позволяет уведомлять нить (через Object.notify / notifyAll) и рано вставать; Thread.sleep() потребует прерывания потока.
0 голосов
/ 14 июля 2011

Может быть, вы ищете

robot.delay(...);
0 голосов
/ 14 июля 2011

метод wait() используется вместе с методом notify() для синхронизации потоков. не используется для задержки в заданном потоке на некоторое время.

Вы получаете это исключение, потому что для wait() в потоке вы должны сначала взять монитор этого потока (с помощью какого-то блока или метода synchronized).

Использовать Thread.sleep().

...