Java swing Image的高度和宽度始终为-1

时间:2014-07-16 13:29:45

标签: java swing imageicon

我知道当它无法获得图像的宽度或高度时,该方法返回-1,但我希望你能告诉我为什么它无法做到这一点。在这里,我创建了一些ImageIcons并将它们保存在图像数组中:

for(int x = 0; x < playerSprites.length; x++){
    playerSprites [x] = new ImageIcon("player" + x + ".png").getImage()
}

稍后我创建了一个类的实例,该实例目前只创建此数组。当我想要从另一个类中获取Array中的图像时,我会检查它们的高度和宽度,并且我总是得到-1:

public Image nextImage(String name){
    Image image = null;
    if(name.equals("player")){
        if(counter == animationImageManager.getPlayerSprites().length-1){
            counter = 0;
        }
        image = animationImageManager.getPlayerSprites()[counter];
        counter++;
    }
    return image;
}

2 个答案:

答案 0 :(得分:2)

如果找不到图像,则高度和宽度仍然会返回-1。

尝试以下示例代码重现问题:

System.out.println(new ImageIcon("").getImage().getWidth(null)); // print -1

值得在Loading Images Using getResource上阅读 Java Tutorial


可能没有正确加载图像。

您可以根据图片位置尝试任何一种。

// Read from same package 
ImageIO.read(getClass().getResourceAsStream("c.png"));

// Read from images folder parallel to src in your project
ImageIO.read(new File("images/c.jpg"));

// Read from src/images folder
ImageIO.read(getClass().getResource("/images/c.png"))

// Read from src/images folder
ImageIO.read(getClass().getResourceAsStream("/images/c.png"))

Read more...

答案 1 :(得分:1)

如果图像为空,则Image的宽度/高度将返回-1。什么时候没有图像。

建议:

  • 使用ImageIO.read(),如果IO出现问题,将抛出IOException,如路径错误。

  • 如果图片是您的应用程序的资源,则不要将其作为文件读取,请通过URL将其作为资源读取。例如,如果图片在src/images中,那么您可以

    URL url = getClass().getResource("/images/myimage/png");
    BufferedImage image = ImageIO.read(url);
    
  • 使用ImageIcon时要注意的重要事项是,当您将String传递给构造函数时,它将在本地文件系统中查找该文件。它可能在您开发时有效,但是一旦您使用jar中的图像部署应用程序,它就不再使用文件路径,因为它将不再有效。您可以将URL传递给ImageIcon,就像上面一样,但就像我说的那样,ImageIO允许更多的错误检测。

  • 只是让您了解当前代码中的内容,通过仅指定图像文件名作为ImageIcon的路径,搜索将在项目的根目录中查找图像文件夹(如果您在IDE中工作),因为它是工作目录。因此,如果您的图像不存在,则无法找到图像。

  • 关于我的第二个要点的另一个注意事项是如何搜索图像。您可以看到我使用的路径"/images/myimage/png"。前面的/是什么,将搜索带到类路径的根,在开发视图中,它是src。调用类通常位于类路径的某个包中,比如com.hello.somepackage.SomeClass。因此,如果SomeClass尝试在没有/的情况下调用getclass getresource,则搜索将从类的位置开始,该类位于包中。

使用资源/图像时需要考虑的一些事项。但是前几点应该让你前进。