Java ImageIO.read(URL) 在不应该返回 null 时返回 null



好吧,我花了大约15个小时试图弄清楚这一点。我正在处理这个程序,它被导出到一个不可运行的jar文件中。问题是我试图在jar中加载一个图像,并将其设置为一个变量。

我看过其他帖子,我想我已经尝试了我能找到的一切,但似乎都不起作用。

我不是在问如何查找图像,因为我可以获得图像的URL,但ImageIO.read(URL)没有抛出任何异常,而是返回null。图片是一个.png,我听说它与ImageIO.read()兼容。我使用的是API,所以log()行就是这样。

感谢您的帮助。非常感谢。

我的项目:

Project
->src
-->package
--->Main.java
--->paint.png

我的代码:

在我的主要方法中:(mainPaint是私人图像)

mainPaint = getImage("paint.png");

方法:

private Image getImage(String fileName) {
URL url = getClass().getResource(fileName);
BufferedImage image = null;
log(url.toString()); // To make sure I have the correct file
// returning jar:file:/C:/Users/Me/MyJar.jar!/package/paint.png
try {
image = ImageIO.read(url);
} catch (IOException e1) {
log("Error converting url to image.");
// This is not happening
}
if (image == null) {
log("Image is null.");
// This is happening
}
return image;
}

URL无效吗?我只是错过了什么吗?我只是想把jar中的本地图像保存为image对象,我觉得这对我想做的事情来说太难了。

编辑:我还尝试过制作mainPaint a BufferedImage并使用:

Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource(fileName));
if(image == null) {
log("Image is null");
}
log("Height: " + image.getHeight(null));
log("Width: " + image.getWidth(null));
BufferedImage bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
// Draw the image on to the buffered image
Graphics2D bGr = bimage.createGraphics();
bGr.drawImage(image, 0, 0, null);
bGr.dispose();
// Return the buffered image
return bimage;

图像的高度和宽度正在返回-1?

ImageIO.read()不会加载SVG文件,因此如果您的图像是SVG格式的,则需要向其添加插件以支持SVG

这是另一篇SO帖子,解释你可以在哪里做到这一点。

ImageIO.read()将只加载GIF、PNG、JPEG、BMP和WBMP图像类型。任何其他图像类型都将返回null而不会出错。

它可以回答你的问题。

最新更新