【发布时间】:2016-09-27 13:50:06
【问题描述】:
好的,我花了大约 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?
【问题讨论】:
-
ImageIO.read 捕获较小的异常 IllegalArgumentException - 如果输入为空。也是有可能的所以不要太激动
-
我正在打印 url.toString() 并且它正在打印图像的位置,所以 url 不为空。
-
@gpasch
ImageIO.read抛出一个IllegalArgumentException,如果输入是null。它没有捕捉到那个异常。 -
@Opoz 你能附上你的PNG吗(最好从JAR中提取,以防它被任何方式破坏)?如果没有相关文件 (complete and verifiable, remember?),我们只能猜测和推测...
标签: java image url jar javax.imageio