提问者:小点点

java. awt.Image getWidth和getHeight方法不能正常工作?


这种行为很奇怪,也许有人会有一个解释和/或一种方法来让它在没有睡眠技巧的情况下工作?

编辑:这是加载图像的方式:

URL url = "path/to/img";
Image img = Toolkit.getDefaultToolkit().getImage(url);

我有对这段代码的只读访问权限,这就是为什么我想从那里开始获取我的BufferedImage。

我在这上面加的是

image.getWidth(null); // "Fake" call to force the image to update his width&height
try {
Thread.sleep(5);
} catch...
if(image.getWidth(null) != -1 && image.getHeight(null) != -1) {
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics bg = bi.getGraphics();
bg.drawImage(image, 0, 0 null);
bg.dispose();
}

如果我删除睡眠,似乎getWidth“没有时间”完成,我仍然有一些图像的宽度/高度=-1。一些用于计算维度的方法可能是异步的。我知道ImageIO.read()是一个更简单、更有效的方法,但我仍然想找到一个变通方法来完成这项工作:)

如果不可能,我会找到另一种方法,其实没什么大不了的。


共2个答案

匿名用户

也许图像尚未完全加载。尝试添加MediaTracker,将图像添加到跟踪器并等待图像完全加载(使用waitForAllwaitForID)。

匿名用户

等待图像完全加载的一种粗略但有效的方法是使用它构造一个ImageIcon。构造函数在图像完全加载之前不会返回。即,

new javax.swing.ImageIcon(image); // force image to load