Spec-Zone .ru
спецификации, руководства, описания, API
|
Код обработки событий Swing работает на специальном потоке, известном, поскольку событие диспетчеризирует поток. Большинство кода, который вызывает методы Swing также, работает на этом потоке. Это необходимо, потому что большинство методов объекта Swing не "ориентировано на многопотоковое исполнение": вызов их от многократных рисков потоков распараллеливает интерференцию или ошибки непротиворечивости памяти. Некоторые компонентные методы Swing маркируются "ориентированными на многопотоковое исполнение" в спецификации API; они могут быть безопасно вызваны от любого потока. Все другие компонентные методы Swing должны быть вызваны от события, диспетчеризируют поток. Программы, которые игнорируют это правило, могут функционировать правильно большую часть времени, но подвергаются непредсказуемым ошибкам, которые трудно воспроизвести.
Полезно думать о коде, работающем на событии, диспетчеризируют поток как серию коротких задач. Большинством задач являются вызовы методов обработки событий, такой как ActionListener.actionPerformed
. Другие задачи могут быть запланированы кодом программы, используя invokeLater
или invokeAndWait
. Задачи на событии диспетчеризируют поток, должен закончиться быстро; если они не делают, необработанные события поддерживают, и пользовательский интерфейс становится безразличным.
Если Вы должны определить, работает ли Ваш код на событии, диспетчеризируют поток, вызывают javax.swing.SwingUtilities.isEventDispatchThread