如何等待图像在Java中完全加载

时间:2010-11-23 20:20:45

标签: java image concurrency

Java image API假定异步加载。各种方法将ImageObserver作为参数,一旦图像完全加载就可以获得通知。

另一方面,某些类型的图像(例如BufferedImages)不使用ImageObserver,也不会调用它。

那么在代码完全加载之前,代码会如何等待?

我想要一个像

这样的方法
public void waitUntilLoaded(Image img){
    ...
}

保证图像在返回时完全加载。

3 个答案:

答案 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的值。您可以使用Threadswhile循环以更干净的方式执行此操作。