繁体   English   中英

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

[英]Java swing Image always has height and width of -1

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

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;
}

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

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

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

值得阅读使用getResource加载图像的 Java教程


可能是它没有正确加载图像。

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

// 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"))

阅读更多...

如果图像为空,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,则搜索将从类的位置开始,该类位于包中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM