Java SwingWorker - 使用发布/进程更新EDT中的TextArea?

时间:2011-06-08 18:14:45

标签: java swing swingworker

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

在Swing GUI上更新JTextArea是正确/线程安全的方法吗?那么使用发布/流程呢?

1 个答案:

答案 0 :(得分:3)

SwingWorker通常用于一次长时间运行的进程(完成所需的时间超过几毫秒)。如果你有持久连接,那么使用一个专用的ExecutorService来运行这个过程,然后当你想要更新一个swing组件调用时更合适

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

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