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:
BufferedImage test = new ImageLoader().loadImage(Library.ImagePath + "imageFile.png");
BufferedImage test = new ImageLoader().loadImage(Main.class, Library.ImagePath + "imageFile.png");
BufferedImage test = new ImageLoader().loadImage("/Images/" + "imageFile.png");
为什么只有第三种情况起作用而且第一种和第二种情况不起作用?我相信它与Library.ImagePath
静态变量有关。
如果有办法解决,请在下面说明!
答案 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"!