2014-10-27 2 views
0

Насколько я знаю, метод SwingUtilies.invokeLater(new Runnable()) используется, чтобы заставить EDT выполнять задания, определенные в объекте Runnable, но как это можно себе представить? Обычно метод run() в объекте Runnable используется для выполнения Java-материала в новом потоке, но не здесь, потому что здесь объект - вызывает только EDT?Как работает SwingUtilies.invokeLater (новый Runnable())?

+3

В примерах «Runnable» нет ничего волшебного. Это всего лишь фрагменты кода для запуска в будущем. 'SU.invokeLater' просто добавляет сам runnable в очередь событий (в обертке события). В какой-то момент он достигает заголовка очереди, и цикл обработки EDT удаляет его для обработки. Для обработки такого события EDT запускает runnable. – Gene

+1

@Gene: Вы должны добавить это как оповещение, чтобы получить credidts :-). – BetaRide

ответ

3

Runnable - это просто интерфейс с единственным методом run(). Любой, имеющий доступ к объекту Runnable, может вызвать этот метод. Потоки делают это. EDT делает это. Исполнители делают это. Ваша программа может это сделать. Это просто конвенция. Другое программное обеспечение может использовать разные соглашения, например, ExecutorService может вызывать объекты Callable.

Внутренний, EDT имеет свой собственный метод запуска, который в цикле извлекает Runnable объекты из своей очереди и вызывает их метод run().

Смежные вопросы