Java ImageIO.read(URL)在不应该

时间:2016-05-29 18:55:40

标签: java image url jar javax.imageio

好的,所以我花了大约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?

2 个答案:

答案 0 :(得分:0)

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

它可以回答你的问题。

答案 1 :(得分:0)

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

Here是另一个SO帖子,解释了你可以做到的地方。