获取图像的高度和宽度时,ImageObserver 字段的用途是什么?

What is the purpose of the ImageObserver field when getting the height and width of an image?

Java 有这个方法:getWidth(ImageObserver observer)

它 returns 图像的宽度。在您到达需要 ImageObserver 的部分之前,此方法看起来很简单。 ImageObserver 作为参数的目的是什么。有没有其他办法解决这个问题?

请注意,我不能只使用这里提到的 ImageIcon:Getting Height and Width of Image in Java without an ImageObserver 原因是因为我最终将从 JFileChooser 加载我的图像。这也是为什么我不能只对高度和宽度使用常量的原因。我不知道用户会想要使用哪张图片。

另外,出于这两个原因,我觉得我不应该 post 我的代码

A) 我的代码离 SSCCE 代码还很远:http://sscce.org/

B) 这是一个很笼统的问题,我觉得我的代码太具体了。

来自JavaDocs

Determines the width of the image. If the width is not yet known, this method returns -1 and the specified ImageObserver object is notified later.

这基本上意味着如果Image没有完全实现(因为它通常在后台线程中加载),当知道该值时会通知ImageObserver

更好的解决方案是使用 ImageIO API 因为 read 方法不会 return 直到图像完全加载(并实现) 或者如果无法加载图像则抛出 IOException

查看 Reading/Loading an Image 了解更多详情

如果你 "really" 必须使用 ImageToolkit 来加载它们,那么你也应该看看 MediaTracker,但是因为 BufferedImage(由 ImageIO.read 编辑 return)扩展了 Image,确实没有太大必要