JLabel:异步加载HTML图像
本文介绍了JLabel:异步加载HTML图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
AJLabel
允许使用HTML内容,其中可以包含一张图片:
请注意,我使用JLabel
在JXTreeTable
中呈现图像,因此JLabel
文本的更新是在呈现器中的EDT上完成的。
问题是图像是同步加载的。使用速度较慢的服务器时,EDT可能会在加载图像时被阻止数秒。
我已经了解了图像同步加载的原因,以及需要修改哪个类才能切换到图像的异步加载。
图像的加载由javax.swing.text.html.ImageView
类完成,该类有一个方法setLoadsSynchronously
。
问题是我不知道如何轻松地调整HTMLFactory
/HTMLEditorKit
,它负责创建ImageView
,并由JLabel
在内部使用。
让事情变得更复杂的是,我需要一个适用于所有外观的解决方案。
如果上面的内容不清楚,下面的线程转储将显示EDT在图像检索过程中被阻止的内容:
推荐答案
一种方法是在该图像只是部分…的一部分不能调用
setIcon
。
SwingWorker
的背景中加载图像,将其临时保存到文件系统,并在<img/>
标记中引用保存的文件。下面的变体改编自example,是一个概念证明。您的实际实现可能使用SwingWorker<List<Row>, Row>
,其中每个Row
包含一个图像File
;您的doInBackground()
实现将在中期结果可用时使用publish()
;您的process()
实现将确保相关树表呈现器看到给定Row
的正确File
。
这篇关于JLabel:异步加载HTML图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!