Java 为什么Image.IO.read()在这种情况下返回null?
ImageLoader.java:Java 为什么Image.IO.read()在这种情况下返回null?,java,Java,ImageLoader.java: public class ImageLoader { private static BufferedImage image; public ImageLoader() { } public BufferedImage loadImage(String filePath) throws IOException { image = ImageIO.read(this.getClass().getResourceA
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;
}
}
public class Library {
public static final String ResourcePath = "./res/";
public static final String ImagePath = ResourcePath + "Images/";
}
Library.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;
}
}
public class Library {
public static final String ResourcePath = "./res/";
public static final String ImagePath = ResourcePath + "Images/";
}
以三种方式使用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;
}
}
public class Library {
public static final String ResourcePath = "./res/";
public static final String ImagePath = ResourcePath + "Images/";
}
BufferedImage test=newimageloader().loadImage(Library.ImagePath+“imageFile.png”)代码>
BufferedImage test=newimageloader().loadImage(Main.class,Library.ImagePath+“imageFile.png”)代码>
BufferedImage test=newimageloader().loadImage(“/Images/”+“imageFile.png”)代码>
库.ImagePath
静态变量有关
如果有解决方法,请在下面描述 这似乎与图像路径有关。展开变量时,值为
./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"!
你在使用哪个
库
类/你的案例中库.ImagePath
有什么价值?@DavidTanzer哦,好吧,让我把它添加到问题中!您确定需要在资源路径
的开头使用/
而不仅仅是/
?@ferrybig有趣的建议,但这不会改变Image.IO.read()返回null的事实。因为您有一个名为/Images的类路径条目,当然没有一个名为/res/Images。