1

我刚刚编写了一个启动 SwingWorker(运行 Socket 服务器)的 Swing 程序。我在 Swing GUI 上有一个 JTextArea,它使用 JTextArea.append(String) 使用 Socket 服务器接收到的数据进行更新。

在 Swing GUI 上更新 JTextArea 是否正确/线程安全?使用发布/流程怎么样?

4

1 回答 1

3

SwingWorker 通常用于一次长时间运行的进程(任何需要超过几毫秒才能完成的进程)。如果您有持久连接,则更适合使用专用的 ExecutorService 来运行该进程,然后当您想要更新摆动组件调用时

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

原因是 SwingWorkers 使用固定的线程池大小,因此如果您有一个永远不会完成的进程,它会限制其他 SwingWorkers 可以同时使用的线程数

于 2011-06-08T18:23:14.203 回答