Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Взаимодействие потоков GUI


Автор: elnino 27.4.2005, 23:47
Объясните, пожалуйста, как взаимодействуют между собой потоки GUI? Я слышал по крайней мере о трех: главный поток программы, поток, обрабатывающий события от компонент и поток, работающий с графикой.

К примеру есть JFrame, содержащий JPanel с картинкой и кнопку JButton. По нажатию на кнопку необходимо перерисовать картинку. Пример примитивный, меня интересует не код, а что при этом происходит на уровне этих самых потоков. Есть ли там очереди? Если да, то сколько их и что в них помещается?

Можно ли считать, что все события от всевозможных листенеров выполняются последовательно в рамках одного окна независимо от глубины вложений компонент друг в друга и их вида, если все они, к примеру, Swing?

Могут ли вызовы paintComponent() для одного и того же компонента перекрывать друг друга?

В C++, если я не ошибаюсь, нужно самому создавать цикл обработки сообщений окна. Конечно, занятие не из приятных, но зато есть гарантия, что в каждый момент времени обрабатывается одно сообщение. Как с этим в Java?

Объясню ситуацию: есть JPanel с картинкой, картинка формируется динамически, в общем формируется довольно долго. Эту долгую работу я провожу в paintComponent(). Инициировать перерисовку могут несколько swing-компонент, мышь и еще отдельно созданный тред. Все это нужно синхронизировать.

Буду благодарен за ссылку. Спасибо smile

Автор: batigoal 28.4.2005, 09:37
Цитата(elnino @ 27.4.2005, 23:47)
Можно ли считать, что все события от всевозможных листенеров выполняются последовательно в рамках одного окна независимо от глубины вложений компонент друг в друга и их вида, если все они, к примеру, Swing?

Да. Почитай, тут немного говорили о смежной теме: http://forum.vingrad.ru/index.php?showtopic=50027

Автор: elnino 7.5.2005, 09:48
Нашел! smile

Цитата
Swing event-handling and painting code executes in a single thread, called the event-dispatching thread. This ensures that each event handler finishes executing before the next one executes and that painting isn't interrupted by events. To avoid the possibility of deadlock, you must take extreme care that Swing components and models are created, modified, and queried only from the event-dispatching thread.


Подробности здесь => http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)