Java SwingWorker - использование публикации / процесса для обновления TextArea в EDT? - PullRequest
1 голос
/ 08 июня 2011

Я только что написал программу Swing, которая запускает SwingWorker (который запускает Socket Server).У меня есть JTextArea в Swing GUI, который обновляется данными, полученными Socket Server, с использованием JTextArea.append (String).

Это правильный / поточно-безопасный способ обновления JTextArea в Swing GUI?Как насчет использования публикации / процесса?

1 Ответ

3 голосов
/ 08 июня 2011

SwingWorker обычно используется для одноразовых процессов (все, что может занять более нескольких миллисекунд). Если у вас есть постоянное соединение, было бы более целесообразно использовать выделенный ExecutorService, который будет запускать процесс, тогда, когда вы захотите обновить вызов компонента Swing

SwingUtilities.invokeLater(new Runnable() { 
    public void run() {
        .. update here
    }
}

Причина этого в том, что SwingWorkers используют фиксированный размер пула потоков, поэтому, если у вас есть процесс, который никогда не завершается, он ограничивает число потоков, которые другие SwingWorkers могут использовать одновременно

...