Spec-Zone .ru
спецификации, руководства, описания, API
|
У каждой программы есть ряд потоков, где логика приложения начинается. В стандартных программах есть только один такой поток: поток, который вызывает main
метод программы class. В апплетах начальные потоки - те, которые создают апплет, возражают и вызывают init
и start
методы; эти действия могут произойти на единственном потоке, или на двух или трех различных потоках, в зависимости от реализации платформы Java. В этом уроке мы вызываем эти потоки начальные потоки.
В программах Swing у начальных потоков нет много, чтобы сделать. Их самое существенное задание должно создать a Runnable
объект, который инициализирует GUI и планирует тот объект для выполнения на событии, диспетчеризирует поток. Как только GUI создается, программа прежде всего управляется событиями GUI, каждое из которых вызывает выполнение короткой задачи на событии, диспетчеризируют поток. Код программы может запланировать additionals задачи на событие, диспетчеризируют поток (если они завершаются быстро, чтобы не вмешаться в обработку событий), или рабочий поток (для продолжительных задач).
Начальный поток планирует задачу создания GUI, вызывая javax.swing.SwingUtilities.invokeLater
или javax.swing.SwingUtilities.invokeAndWait
Runnable
это определяет новую задачу. Их единственная разница обозначается их именами: invokeLater
просто планирует задачу и возвраты; invokeAndWait
ожидает задачи закончиться перед возвратом.
Можно видеть примеры этого всюду по учебному руководству Swing:
SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } });
В апплете задача создания GUI должна быть запущена от init
использование метода invokeAndWait
; иначе, init
может возвратиться прежде, чем GUI создается, который может вызвать проблемы для веб-браузера, запускающего апплет. В любом другом виде программы, планируя задачу создания GUI обычно последняя вещь, которую делает начальный поток, таким образом, не имеет значения, использует ли это invokeLater
или invokeAndWait
.
Почему начальная буква не распараллеливает, просто создают GUI непосредственно? Поскольку почти весь код, который создает или взаимодействует с компонентами Swing, должен работать на событии, диспетчеризируют поток. Это ограничение обсуждается далее в следующем разделе.