0

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

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

4

1 回答 1

2

从Swing 中的并发开始。

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

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

另一种选择可能是使用Executors,特别是线程池实现。

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

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

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

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

请求者将构建某种RunnableCallable包装一个SwingWorker.

当执行时,这个“请求任务”将启动SwingWorker,允许它获取图像,合并它们和publish结果,这将通知回调接口。然后,“请求任务”将简单地等到SwingWorker#get返回后再退出。

作为一个想法...

于 2013-09-30T02:11:12.037 回答