Java getResourceAsStream返回NullpointerException
在春天,我想让图像显示在我的浏览器上。该图像位于我的主要项目中,即Java getResourceAsStream返回NullpointerException,java,spring-boot,inputstream,request-mapping,Java,Spring Boot,Inputstream,Request Mapping,在春天,我想让图像显示在我的浏览器上。该图像位于我的主要项目中,即 > myproject - src - target - img.png 这意味着img.png在根目录中,因此我不提供任何路径,但它返回一个NullPointerException。我尝试在src中添加图像,并将路径更改为src\img.png,但仍然给出了NPE 请注意,这个项目使用的是Maven 堆栈跟踪: java.lang.NullPointerException: null at o
> myproject
- src
- target
- img.png
这意味着img.png在根目录中,因此我不提供任何路径,但它返回一个NullPointerException
。我尝试在src中添加图像,并将路径更改为src\img.png
,但仍然给出了NPE
请注意,这个项目使用的是Maven
堆栈跟踪:
java.lang.NullPointerException: null
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792) ~[commons-io-2.4.jar:2.4]
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769) ~[commons-io-2.4.jar:2.4]
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744) ~[commons-io-2.4.jar:2.4]
at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:462) ~[commons-io-2.4.jar:2.4]
以下是我使用的代码:
InputStream in = DataService.class.getResourceAsStream("img.png");
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
result.setData(new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED));
InputStream in=DataService.class.getResourceAsStream(“img.png”);
最终HttpHeaders=新HttpHeaders();
headers.setContentType(MediaType.IMAGE\u PNG);
setData(新的ResponseEntity(IOUtils.toByteArray(in),headers,HttpStatus.CREATED));
对标记为结束的问题的评论:
- 这个问题与编程有关,因为API说:
img.png
添加到不同的位置,我的代码仍返回null
- 此问题不是此问题的重复:
该问题的答案是文件必须与
this
位于同一目录中,但在这个问题中,即使我将图像添加到classDataService
所在的同一位置,它也不起作用 您只需要做一个小小的更改,它是getResourceAsStream(“/img.png”)而不是getResourceAsStream(“img.png”)
我希望这会有所帮助。您只需要做一个小小的更改,它是getResourceAsStream(/img.png”)而不是getResourceAsStream(“img.png”)
我希望这会有所帮助。当使用
Maven
完成项目设置时,将图像添加到resources
文件夹工作正常。代码中没有任何更改:
DataService.class.getClassLoader().getResource("img.png")
当使用
Maven
完成项目设置时,将图像添加到resources
文件夹会起作用。代码中没有任何更改:
DataService.class.getClassLoader().getResource("img.png")
这里的问题是,
/src
可能是类路径的根(这取决于您如何编译项目),因此您应该将img.png放到src
文件夹中,下面的代码可以工作
DataService.class.getResourceAsStream(“img.png”)代码>
一般来说,getResourceAsStream()从类路径的根查找文件。这里的问题是/src
可能是类路径的根(这取决于您如何编译项目),因此您应该将img.png放入src
文件夹,下面的代码可以工作
DataService.class.getResourceAsStream(“img.png”)代码>
一般来说,getResourceAsStream()从类路径的根目录中查找文件。它实际上是返回aNullPointerException
,还是仅仅意味着它返回null
?我将更新我的答案,这就是它所说的!将它放在与DataService.java
相同的目录中,并使用getResourceAsStream(“img.png”)
构建项目并查看Build或target文件夹以检查img.png文件是否存在。如果是maven项目,则将图像放在src/resources文件夹中。@Braj因为是maven项目,添加到资源中是否真的有效return
aNullPointerException
,或者您的意思是它返回null
?我将更新我的答案,这就是它所说的!将它放在与DataService.java
相同的目录中,并使用getResourceAsStream(“img.png”)
构建项目并查看Build或target文件夹以检查img.png文件是否存在。如果是maven项目,则将映像放在src/resources文件夹中。@Braj因为是maven项目,所以添加到资源WorkedId不适用于该更改您确定NPE是因为映像路径吗?因为下面的代码对我来说非常好:BufferedImage img=ImageIO.read(DataService.class.getResourceAsStream(“/img.jpg”);如果(img!=null){System.out.println(“not null”);}
无法处理该更改,您确定NPE是因为映像路径吗?因为下面的代码对我来说非常好:BufferedImage img=ImageIO.read(DataService.class.getResourceAsStream(“/img.jpg”);如果(img!=null){System.out.println(“非null”);}