扩展到HovercraftFullOfEels的建议,我会创建一个自定义Component
(在这种情况下可能是JLabel
)。
我会在每个中使用一个javax.swing.Timer
,设置为每5秒重复执行一次下载请求。这里的问题是;
- 这可能会导致你的系统资源流失,如果你有大量的图片,每个组件请求单独下载,
- 才能下来每个图像可能需要更长的时间5秒钟的时间。在这种情况下你会做什么?
另一种方法是有一个负责处理下载请求的集中式队列。这可以是自动的(即,你注册你Component
它,它决定何时应该更新)或愚蠢的,你可以添加一个请求,当你想要。
在自动模型中,您可以更好地控制资源管理。
在这种情况下,我会试图使用类似ScheduledExecutorService的东西来管理下载任务。基本思想是,在未来的某个特定时间(5秒),下载任务将执行,这将下载图像并将其应用于Component
,然后它会将新的下载请求注册回ScheduledExecutorService
这种方法允许您控制由系统创建的线程数以及修改请求之间的时间。
在哑模型,我可能会使用的javax.swing.Timer
&一个ExectutorService(可能是ThreadPoolExecutor)的组合。计时器将与每个Component
相关联,当它触发时,它将新的请求放到哑队列中。哑队列,在未来的某个时间将下载图像&返回到Component
。
我看到的主要问题是,在前一个请求完成之前,组件可能会请求新图像。虽然您可以使用技巧来捕获这些条件,但使用智能队列思路会更简单,更容易
所有这些想法都利用了Java的Thread
功能,在这种情况下,了解Event Dispatching Thread &如何处理Concurrency in Swing
*“我想显示从url获得的图像”*图像的内容是什么?什么是典型的URL? – 2012-08-09 00:58:30