Что лучше - основной цикл или отдельные темы? - PullRequest
2 голосов
/ 26 ноября 2010

Сценарий таков: у меня есть приложение Java Swing с JFrame. Есть текстовая область, где вы можете набирать вещи, затем вы получаете результаты поиска в другой текстовой области, и когда вы выбираете один из результатов, есть кнопка «Скачать». И тут возникает проблема. При нажатии «Скачать» приложение должно отобразить информацию о полноте загруженных файлов. Я сделал это с помощью расширяющего потока класса с именем DownloadManager, который обновляет информацию за определенный период времени. Однако я обеспокоен тем, что могут быть проблемы с синхронизацией. Есть ли стандартный способ обновления такой динамической информации без потоков? Есть ли mainloop или что-то подобное в классах свинга Java. Как ты это делаешь?

Ответы [ 3 ]

3 голосов
/ 26 ноября 2010

Посмотрите на SwingWorker:

http://download.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

Могут быть и лучшие способы, но именно это я и использовал для индикатора выполнения при загрузке и обновлении индикаторов выполнения.

2 голосов
/ 26 ноября 2010

Нет, проблем с синхронизацией не так много. При работе с фоновыми потоками в Swing рекомендуется использовать SwingWorker .

2 голосов
/ 26 ноября 2010

Все, что обновляет GUI в Java, должно выполняться потоком отправки событий GUI.Чтобы принудительно запустить метод в этом потоке, вам нужно использовать SwingUtilities.invokeLater.Если вы сделаете что-либо еще, это может привести к зависанию, не обновлению или другим странностям вашего графического интерфейса!

Это хороший учебник, который описывает его лучше, чем я:

http://www.javamex.com/tutorials/threads/invokelater.shtml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...