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

4
Java图像API假定异步加载。各种方法将ImageObserver作为参数,该参数可能会在图像完全加载后得到通知。
另一方面,某些类型的图像(例如BufferedImages)不使用ImageObserver,因此永远不会调用它。
那么,等待图像完全加载的代码应该是什么样子的?
我想要一个类似于:
public void waitUntilLoaded(Image img){
    ...
}

这保证了在返回时图像已经完全加载。

3个回答

6
一个不错的选择是 java.awt.MediaTracker。在 API 文档中有一个很好的代码示例(点击这里)。简单来说,你需要创建一个 MediaTracker 对象以跟踪组件所需的图像,并告诉它要跟踪哪些图片,然后调用 tracker.waitForID(n) 方法,该方法将阻塞直到指定的图像加载完成。

显然,你需要将此代码放在事件线程之外 - 但这一点你已经知道了。 :)


1
看起来这也没有用,因为我没有组件。 - Jens Schauder

1

我认为我不能使用它。我将从未知来源获取一张图片,并需要确保在开始工作之前它是完整的。 - Jens Schauder

1

我发现另一种选择是等待img.getWidth()返回不等于-1的值。您可以通过使用线程while循环以更清晰的方式实现此操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接