Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какие преимущества у InvokeLater 
V
    Опции темы
COVD
Дата 17.8.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



В примерах Swing GUI встречается следующая конструкция, используемая, когда надо сделать какие-то действия (наверное, поменять цвет, например). Создается обьект и ставится в очередь на выполнение. Это похоже на сервис , предоставляемый java.util.concurrent.Executors , но используется системный поток.  Интересны мнения и комментарии -  насколько это желательно применять и в каких случаях (только ли связаное с GUI).

Код

                java.awt.EventQueue.invokeLater(new Runnable() {
                    public void run() {
                        // do something
                    }
                });

PM MAIL   Вверх
lando1
Дата 18.8.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 30.4.2007

Репутация: нет
Всего: нет



Я например его использую в случае, когда есть какой-то длинный процесс в основном потоке и надо отобразить его статус в свинге - 
если просто писать setValue в прогресс баре - то он обновиться только когда процесс завершиться.

PM MAIL ICQ   Вверх
COVD
Дата 20.8.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Цитата

если просто писать setValue в прогресс баре - то он обновиться только когда процесс завершиться.


возможно, кроме setValue надо еще validate() было делать, тогда бы и основной поток обновил.

Я предполагал, что если все действия с визуальными компонентами поместить в один поток, то это снимет проблемы с синхронизацией. Собственно, так и оказалось. На rsdn в теме "Swing, нитевая безопасность и Эккель" приведена цитата из документации:

Цитата

"In general Swing is not thread safe. All Swing components and related classes, unless otherwise documented, must be accessed on the event dispatching thread."


Практически все компоненты, кроме ТехтField.setText() , требуют синхронизации или их надо трогать из одного потока. Если действия инициированы например нажатием кнопки на интерфейсе, то они выполняются в потоке AWT-EventQueue и не требуют синхронизации (в предположении, что такой поток один). А вот если внешний поток, то правильнее использовать java.awt.EventQueue.invokeLater или SwingUtilities.invokeLater .

Это все описано в http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html ://http://java.sun.com/docs/books/tuto...ncy/index.html ://http://java.sun.com/docs/books/tuto...ncy/index.html 
 




Это сообщение отредактировал(а) COVD - 21.8.2007, 01:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.