gpt4 book ai didi

java - 带 Swing 的多线程

转载 作者:行者123 更新时间:2023-12-02 06:41:38 24 4
gpt4 key购买 nike

我有一个关于在 GUI 应用程序中使用线程的问题。假设(作为一个简单的例子)我有一个带有一系列图像的 swing 应用程序。我想运行两个线程,分别获取父级的图像。 (因此,对于给定数量的学生,从每个服务器端点获取母亲图像和父亲图像)。然后将返回的父亲和母亲的图像附加到屏幕上的图像上,这样我就为多个学生提供了一系列带有母亲、父亲、母亲、父亲的图像。

如何在多线程环境中安排此操作?每次获取母亲或父亲图像的调用都必须并行,并且不能阻止图像在屏幕上的显示。每个线程返回图像后屏幕显示的图像是否刷新?这将如何构建?

最佳答案

Concurrency in Swing 开头.

绝对最简单的方法可能是使用 SwingWorker,它具有需要查找的项目列表并允许其处理该列表。

这样做的问题是它只会一个接一个地运行每个请求,这使得它比其他选项慢一些。这样做的好处是,它提供了与事件调度线程重新同步的简单功能,以便您可以通知 UI 或安全地对其进行更改。

另一个选择可能是使用 Executors ,特别是Thread Pool实现。

这允许您提交许多应在将来某个时间执行的任务,但允许您控制进程在任何时间可以使用的线程数。

缺点是,当您想要更新 UI 时,您需要自己负责使用 SwingUtilities.invokeLater 将更改同步回 UI

现在。您“可以”同时使用两者。

基本上,您需要设置某种“请求”类,该类允许您将相关信息传递给“母亲”和“父亲”服务器、原始图像以及可能的某种回调接口(interface)这会告诉您最终图像何时渲染。

请求者将构建某种RunnableCallable来包装SwingWorker

执行时,此“请求任务”将启动 SwingWorker,允许其获取图像、合并图像并发布结果,这将通知回调接口(interface)。然后,“请求任务”只需等待 SwingWorker#get 返回即可退出。

作为一个想法...

关于java - 带 Swing 的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19085403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com