Эти два метода в SwingWorker сейчас меня смущают, и мне кажется, что их очень легко использовать неправильно.
Метод publish( ) описывает следующее:
Отправляет блоки данных в метод process(java.util.List). Этот метод должен использоваться внутри метода doInBackground для доставки промежуточных результатов для обработки в потоке отправки событий внутри метода процесса.
Для меня это означает, что пока мой рабочий поток выполняет свой doInBackground(), я могу создавать "фрагменты" (должны ли они быть чем-то конкретным или это просто способ сослаться на объекты сообщений?), а затем публиковать их для обработки на мой графический интерфейс Swing.
Это приводит меня к процесс(). В javadoc описано следующее:
Получает фрагменты данных от метода публикации асинхронно в потоке отправки событий.
Просмотрев документацию по обоим методам, может ли кто-нибудь прояснить, какой механизм стоит за тем, как это происходит? Я понимаю, что в соответствии с документацией это асинхронный процесс, но, поскольку он происходит в EDT, я полагаю, что в нем есть некоторая предсказуемость.
В документации publish()
указано следующее:
Поскольку метод обработки вызывается асинхронно в потоке отправки событий, несколько вызовов метода публикации могут выполняться до выполнения метода обработки. В целях повышения производительности все эти вызовы объединяются в один вызов со связанными аргументами.
Подводя итог, мой вопрос состоит из двух частей:
- Кто должен звонить
process()
? - Каков рабочий процесс для
process()
в контексте SwingWorker и EDT?
Пожалуйста, дайте мне знать, если необходимы какие-либо разъяснения.
process()
— это обратный вызов. Вам не нужно звонить.process()
вызывается библиотекой в EDT. - person johnchen902   schedule 30.08.2013