线程"main"中出现异常java. lang.宽度(0)和高度(0)必须非零

lsmd5eda  于 2022-12-28  发布在  Java
关注(0)|答案(1)|浏览(149)

'

immagineRegistrati = new ImageIcon("../img/registrati.png");
scalaRegistrati = new ImageIcon(immagineRegistrati.getImage().getScaledInstance(immagineRegistrati.getIconWidth()/20*2, immagineRegistrati.getIconHeight()/20*2, java.awt.Image.SCALE_SMOOTH)); //immagine in scala

'
这是给予我标题错误的代码行。有人知道吗?

2hh7jdfx

2hh7jdfx1#

ImageIcon可以在映像完全加载之前返回(它在后台加载),这意味着widthheight可能为零
一种解决方案是使用MediaTracker,这将允许您"等待"直到映像完全加载,例如。

try {
    MediaTracker mt = new MediaTracker(new JPanel());
    Image image = new ImageIcon().getImage();
    mt.addImage(image, 0);
    System.out.println("Wait for...");
    mt.waitForAll();
    System.out.println("I be loaded");
    // Image is now fully loaded, you should be able to deal with it
} catch (InterruptedException ex) {
    ex.printStackTrace();
}

话虽如此,一个总体上更好的解决方案是使用ImageIO.read来加载图像,它不仅在返回之前加载图像,而且如果由于某种原因无法加载图像,它将抛出ExceptionImageIcon不会执行此操作)
"Oh GOD SPIDERS"也是正确的,你可能已经缩放图像到遗忘,所以你可能要检查你的目标大小不是零,然后再尝试缩放图像。
有关详细信息,请参见Reading/Loading an Image
我还建议避免getScaledInstance,它往往不是很好。
我倾向于使用"分而治之"的方法(将图像分成两半,直到达到所需的大小),例如

相关问题