Сценарий таков: у меня есть приложение Java swing с JFrame. Существует текстовое поле, где вы можете вводить вещи, затем вы получаете результаты поиска в другом текстовом поле, и когда вы выбираете один из результатов, появляется кнопка «Загрузить». И здесь возникает проблема. Когда вы нажмете «Загрузить», приложение должно отобразить информацию о полноте загруженных файлов. Я делаю это с расширением класса, называемым DownloadManager, который обновляет информацию в течение определенного периода времени. Однако я обеспокоен тем, что могут возникнуть проблемы с синхронизацией. Существует ли стандартный способ обновления такой динамической информации без потоков? В Java-классах swing есть mainloop или что-то в этом роде. Как ты делаешь это?Что лучше - mainloop или отдельные темы?
ответ
Посмотрите SwingWorker:
http://download.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html
Там может быть более эффективными способами, но это то, что я использовал для моего прогресса бара при загрузке вещей и обновления прогресса баров.
Все, что обновляет графический интерфейс на Java, должно выполняться потоком отправки событий GUI. Чтобы заставить метод запускаться в этом потоке, вам нужно использовать SwingUtilities.invokeLater. Выполнение чего-либо еще может потенциально привести к зависанию графического интерфейса, а не к обновлению или другой странности!
Это хороший учебник, который описывает его лучше, чем я:
Нет, не так уж много проблем с синхронизацией. Если вы работаете с фоновыми потоками в Swing, рассмотрите возможность использования SwingWorker.