我刚刚编写了一个Swing程序,它启动了一个SwingWorker(运行一个Socket服务器)。我在Swing GUI上有一个JTextArea,它使用JTextArea.append(String)来更新套接字服务器收到的数据。
在Swing GUI上更新JTextArea是正确/线程安全的方法吗?那么使用发布/流程呢?
答案 0 :(得分:3)
SwingWorker通常用于一次长时间运行的进程(完成所需的时间超过几毫秒)。如果你有持久连接,那么使用一个专用的ExecutorService来运行这个过程,然后当你想要更新一个swing组件调用时更合适
SwingUtilities.invokeLater(new Runnable() {
public void run() {
.. update here
}
}
原因是SwingWorkers使用固定的线程池大小,所以如果你有一个永远不会完成的进程,它会限制其他SwingWorkers可以同时使用的线程数