| Цитата | если просто писать 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
|