Java image API假定异步加载。各种方法将ImageObserver作为参数,一旦图像完全加载就可以获得通知。
另一方面,某些类型的图像(例如BufferedImages)不使用ImageObserver,也不会调用它。
那么在代码完全加载之前,代码会如何等待?
我想要一个像
这样的方法public void waitUntilLoaded(Image img){
...
}
保证图像在返回时完全加载。
答案 0 :(得分:4)
一个好的选择是java.awt.MediaTracker
。有一个很好的代码示例in the API documentation。简而言之,您创建一个MediaTracker对象来跟踪组件的图像,告诉它您要跟踪哪些图像,然后调用tracker.waitForID(n)
,它将阻塞,直到指定的图像加载完毕。
显然,您需要将其保留在事件线程之外 - 但您知道这一点。 :)
答案 1 :(得分:1)
使用javax.imageio.event.IIOReadProgressListener
并覆盖其imageComplete
方法,而不是ImageObserver
。
这假设您可以更改代码以使用javax.imageio.ImageReader
实际读取它(使用ImageIO
的静态方法之一创建)。
答案 2 :(得分:0)
我发现的另一个选择是等到img.getWidth()
返回不同于-1的值。您可以使用Threads
和while
循环以更干净的方式执行此操作。