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静态变量有关.
如果有办法解决它,请在下面说明!
最佳答案 看起来它与您的图像路径有关.展开变量时,值为
./res/Images
但是从你的第三个例子看,它看起来像是在类路径中
/Images/imageFile.png
因此,请尝试将ImagePath更改为:
public static final String ImagePath = "/Images/";
这里的区别是(注意:我只是从现在开始猜测),在类路径中,图像似乎部署在Images文件夹中.在文件系统上,您似乎在启动应用程序的根文件夹中有一个“res”文件夹.
假设你的文件夹结构如下:
myProject
+--- res
| +---Images
| \---Texts
\--- src
当你在myProject中启动应用程序,并且res在你的类路径上时,当你通过classpath或通过File加载时,图像的路径会有所不同:
new File("./res/Images/..."); //Relative to the working directory of the app!
classPath.getResourceAsStream("/Images/..."); //Root is your classpath, i.e. "res"!