SwingWorker обычно используется для одноразовых процессов (все, что может занять более нескольких миллисекунд). Если у вас есть постоянное соединение, было бы более целесообразно использовать выделенный ExecutorService, который будет запускать процесс, тогда, когда вы захотите обновить вызов компонента Swing
SwingUtilities.invokeLater(new Runnable() {
public void run() {
.. update here
}
}
Причина этого в том, что SwingWorkers используют фиксированный размер пула потоков, поэтому, если у вас есть процесс, который никогда не завершается, он ограничивает число потоков, которые другие SwingWorkers могут использовать одновременно