Задача, которую мне нужно выполнить, включает в себя запрос некоторых данных с внешнего сервера, выполнение некоторой (довольно продолжительной) обработки данных, а затем обновление графического интерфейса пользователя с результатами обработки. Поскольку сервер может не отвечать, задача хорошо подходит для SwingWorker: метод doInBackground()
получает результаты, а затем метод done обновляет графический интерфейс.
Мне нужно, чтобы это происходило раз в несколько секунд. Я знаю, что могу просто использовать цикл while и Thread.sleep и создавать новый SwingWorker после каждого сна. Но все, что я читал, не одобряет использование петель и сна. Я хотел бы использовать таймер, но:
Использование таймера колебания кажется контрпродуктивным; так как они работают на EDT, у меня практически не будет причин использовать метод SwingWorker doInBackground. Если сервер не отвечает, графический интерфейс не отвечает.
Использование java.util.Timer кажется немного расточительным: кажется, что он создает фоновый поток для TimerTask (), и, поскольку я просто создаю SwingWorker для выполнения реальной работы, я по существу фоновый поток, который создает другой фоновый поток.
Кто-нибудь может сказать мне, какое решение лучше? Я хотел бы придерживаться SwingWorker, поскольку он кажется идеально подходящим для этой задачи, но я бы хотел избежать использования цикла while, если смогу помочь.
Спасибо