Java SwingWorker - 使用发布/处理来更新 EDT 中的 TextArea?

发布于 2024-11-14 22:28:32 字数 200 浏览 1 评论 0原文

我刚刚编写了一个启动 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心清如水 2024-11-21 22:28:32

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

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

这样做的原因是 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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文