好的,所以我花了大约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;
}
网址无效吗?我只是错过了一些东西吗?我只是想把jar中的本地图像保存为Image对象,我觉得这对我想做的事情来说太难了。
编辑: 我也尝试将mainPaint变为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?
答案 0 :(得分:0)
ImageIO.read()将仅加载GIF,PNG,JPEG,BMP和WBMP图像类型。 任何其他图像类型都将返回null而不会出错。
它可以回答你的问题。
答案 1 :(得分:0)
ImageIO.read()
不会加载SVG文件,因此如果您的图片是SVG格式,则需要添加插件才能支持SVG
Here是另一个SO帖子,解释了你可以做到的地方。