[英]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.