为什么Image.IO.read()在这种情况下返回null?

时间:2015-12-23 11:21:55

标签: java

ImageLoader.java:

public class ImageLoader {
    private static BufferedImage image;

    public ImageLoader() {
    }

    public BufferedImage loadImage(String filePath) throws IOException {
        image = ImageIO.read(this.getClass().getResourceAsStream(filePath));
        return image;
    }

    public static BufferedImage loadImage(Class classPath, String filePath) throws IOException {
        image = ImageIO.read(classPath.getResourceAsStream(filePath));
        return image;
    }
}

Library.java:

public class Library {
    public static final String ResourcePath = "./res/";
    public static final String ImagePath = ResourcePath + "Images/";
}

以三种方式使用ImageLoader.java:

  1. BufferedImage test = new ImageLoader().loadImage(Library.ImagePath + "imageFile.png");

  2. BufferedImage test = new ImageLoader().loadImage(Main.class, Library.ImagePath + "imageFile.png");

  3. BufferedImage test = new ImageLoader().loadImage("/Images/" + "imageFile.png");

  4. 为什么只有第三种情况起作用而且第一种和第二种情况不起作用?我相信它与Library.ImagePath静态变量有关。

    如果有办法解决,请在下面说明!

1 个答案:

答案 0 :(得分:2)

它看起来与您的图像路径有关。展开变量时,值为

./res/Images

但是从你的第三个例子看,它看起来像是在

的类路径中
/Images/imageFile.png

因此,请尝试将ImagePath更改为:

public static final String ImagePath = "/Images/";

这里的区别是(注意:我只是从现在开始猜测),在类路径中,图像似乎部署在Images文件夹中。在文件系统上,您似乎在启动应用程序的根文件夹中有一个“res”文件夹。

假设你的文件夹结构如下:

myProject
+--- res
|    +---Images
|    \---Texts
\--- src

当您在myProject中启动应用程序时,res位于类路径上,当您通过类路径或通过文件加载时,图像的路径会有所不同:

new File("./res/Images/..."); //Relative to the working directory of the app!
classPath.getResourceAsStream("/Images/..."); //Root is your classpath, i.e. "res"!