我不知道为什么在Java中它应该如此复杂,但我已经花了好几个小时就可以了。我在\ src \ resources \ resize-cursor.png
中有一个png图像现在,我想将此图片与BufferedImage
class
BufferedImage myPicture = null;
try {
// this is just one of the examples I tried... I've already tried like 10 ways to achieve this but I am always getting NullReferenceException
myPicture = ImageIO.read(getClass().getResourceAsStream("\\resources\\resize-cursor.png")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
是否有一种工作方式只是链接我的应用程序中的png资源?
答案 0 :(得分:1)
您是否尝试过getClass().getResourceAsStream("/resources/resize-cursor.png")
?
答案 1 :(得分:0)
用7zip打开jar,或者你可以在IDE中打开它。
然后搜索文件。我的猜测:/ resources是最顶层的目录。
myPicture = ImageIO.read(getClass().getResourceAsStream("/resize-cursor.png")));
对区分大小写的路径使用斜杠/
。
确保getClass()
的类在同一个jar中。想想继承可能会做什么。
你也可以这样做:
myPicture = ImageIO.read(ClassInJar.class.getResourceAsStream("/resize-cursor.png")));
答案 2 :(得分:0)
我认为问题在于你使用的是2个斜杠而且它们是错误的。使用此“/”代替“\”或“\”。如果您将资源文件夹设置为类文件夹,也可能会有所帮助。
如果您想了解更多信息,请点击以下链接: 1. Oracle tutorial on BufferedImage 2. Documentation of BufferedImage
我喜欢加载图片的方法是创建一个类,使其更简单。
public class BufferedImageLoader {
private BufferedImage image;
public BufferedImage loadImages(String path) {
try { image = ImageIO.read(getClass().getResource(path)); }
catch (IOException e) { e.printStackTrace(); }
return image;
}
}
使用此加载“bufferedImage”。
BufferedImageLoader loader = new BufferedImageLoader();
image1 = loader.loadImages("/image1.png");
image2 = loader.loadImages("/image2.png");