Java SwingWorker - 使用发布/处理来更新 EDT 中的 TextArea?
我刚刚编写了一个启动 SwingWorker(运行 Socket 服务器)的 Swing 程序。我在 Swing GUI 上有一个 JTextArea,它使用 JTextArea.append(String) 使用 Socket Server 接收到的数据进行更新。
这是在 Swing GUI 上更新 JTextArea 的正确/线程安全方法吗?使用发布/处理怎么样?
I had just coded a Swing program that starts up a SwingWorker (which runs a Socket Server). I have a JTextArea on the Swing GUI which gets updated with the data received by the Socket Server, using a JTextArea.append(String).
Is it the correct/threadsafe way to update a JTextArea on the Swing GUI? What about using publish/process?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
SwingWorker 通常用于一次性长时间运行的进程(任何需要几毫秒才能完成的进程)。如果您有持久连接,那么使用专用的 ExecutorService 来运行该进程会更合适,然后当您想要更新 swing 组件时调用
这样做的原因是 SwingWorkers 使用固定的线程池大小,因此如果您有一个永远不会完成的进程,它限制了其他 SwingWorkers 可以同时使用的线程数
SwingWorker is usually used for one time long running processes (anything that will take more than a few milliseconds to complete). If you have persistent connection, it would be more appropriate to use a dedicated ExecutorService which will run the process, then when you want to update a swing component call
The reason for this is SwingWorkers use a fixed thread pool size, so if you have a process that never completes than it limits the number threads other SwingWorkers can use concurrently