что означает это утверждение - PullRequest
2 голосов
/ 31 марта 2011

unlike SwingUtilities.invokeAndWait(), the event thread is permitted to call SwingUtilities.invokeLater(). Я не могу понять это ясно.

Пожалуйста, помогите мне в этом.

Ответы [ 3 ]

7 голосов
/ 31 марта 2011

Другой поток (не основной поток событий Swing) может вызвать invokeAndWait для ожидания готовности потока событий Swing к выполнению какого-либо действия. Однако поток событий Swing не может ждать самого себя. Поэтому он вызывает invokeLater , чтобы поместить действие в очередь для последующего выполнения.

3 голосов
/ 31 марта 2011

Не будучи Java-разработчиком, я думаю, что если invokAndWait будет выполнено в потоке событий, он будет эффективно блокироваться.

2 голосов
/ 03 мая 2011

Источник

Метод invokeAndWait () выглядит аналогично, но имеет три важных семантических различия. Во-первых, метод invokeLater () будет выполняться асинхронно в будущем. Вы не знаете, когда это будет на самом деле. С другой стороны, метод invokeAndWait () является синхронным: он не возвращается, пока его цель не завершила выполнение. Таким образом, как правило, вы должны использовать метод invokeAndWait (), чтобы прочитать значение компонентов Swing или убедиться, что что-то отображается на экране, прежде чем продолжить выполнение программы. В противном случае вы можете использовать метод invokeLater ().

Второе отличие состоит в том, что метод invokeAndWait () сам по себе не может быть вызван из потока диспетчеризации событий. Поток, выполняющий метод invokeAndWait (), должен ждать, пока поток, управляющий событиями, не выполнит некоторый код. Никакой поток, в том числе поток событий, не может ждать, пока он сам что-то сделает. Следовательно, если вы выполняете метод invokeAndWait () из потока диспетчеризации событий, он генерирует ошибку java.lang.Error. Это приводит к завершению потока диспетчеризации событий (если вы не предприняли необычный шаг по отлову объектов Error в вашем коде); в свою очередь вся ваша программа становится отключенной.

Третье отличие состоит в том, что метод invokeAndWait () может вызвать исключение InterruptedException, если поток прерывается до того, как поток, отправляющий событие, запускает цель, или InvocationTargetException, если объект Runnable выдает исключение или ошибку времени выполнения.

-IvarD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...