Image.IO无法读取输入文件-Java

Image.IO无法读取输入文件-Java,java,nullpointerexception,bufferedimage,javax.imageio,Java,Nullpointerexception,Bufferedimage,Javax.imageio,嘿,我目前正试图用java将图像的字节内容读入字节数组,但似乎无法从文件中打开图像。控制台正在引发此异常: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 这就是问题所在: BufferedImage im = ImageIO.read( new File( getClass().getResource( "/Images/default_pic.png" ).to

嘿,我目前正试图用java将图像的字节内容读入字节数组,但似乎无法从文件中打开图像。控制台正在引发此异常:

 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
这就是问题所在:

BufferedImage im =
   ImageIO.read(
      new File(
         getClass().getResource( "/Images/default_pic.png" ).toURI()));
我的软件包如下所示:

-UI
  -Class //code getting image here
-UI.Images
  -default_pic.png

检查文件是否使用CMYK着色(不知道这是否仅适用于JPEG)。如果是这种情况,那么ImageIO没有扩展名就无法读取它


检查

检查文件是否使用CMYK着色(不知道这是否仅适用于JPEG)。如果是这种情况,那么ImageIO没有扩展名就无法读取它

选中您可以尝试以下操作:

BufferedImage im = ImageIO.read(getClass().getClassLoader().getResourceAsStream("/Images/default_pic.png"))
您可以尝试以下方法:

BufferedImage im = ImageIO.read(getClass().getClassLoader().getResourceAsStream("/Images/default_pic.png"))

您的路径中缺少目录
UI
,我建议:

BufferedImage im =
   ImageIO.read(
      getClass().getClassLoader().getResourceAsStream(
         "/UI/Images/default_pic.png" ));

您的路径中缺少目录
UI
,我建议:

BufferedImage im =
   ImageIO.read(
      getClass().getClassLoader().getResourceAsStream(
         "/UI/Images/default_pic.png" ));

谢谢你的回复。在尝试了您的代码之后,我得到了一个“java.lang.IllegalArgumentException:input==null!”异常。您的图像位于哪里?我相信src/main/resources/Images是正确的。另外,请检查您的图像是否为.png,而不是.png…该图像位于src/UI/ImagesOk中,请参阅Aerospace的答案。我会投票的,你能试试吗?你是不是在没有前导“/”的情况下尝试过这个,比如“Images/default\u pic.png”?谢谢你的回复。在尝试了您的代码之后,我得到了一个“java.lang.IllegalArgumentException:input==null!”异常。您的图像位于哪里?我相信src/main/resources/Images是正确的。另外,请检查您的图像是否为.png,而不是.png…该图像位于src/UI/ImagesOk中,请参阅Aerospace的答案。我会投票的,你能试试吗?你是不是在没有前导“/”的情况下尝试了这个,比如“Images/default\u pic.png”?谢谢你的回复,在尝试了你的回复后,我还得到了一个java.lang.IllegalArgumentException:input==null!在尝试了你的回答之后,我还得到了一个java.lang.IllegalArgumentException:input==null!例外调试名称解析问题的最简单方法是在
ImageIO.read()
上设置一个断点,并尝试许多不同的路径,直到
getResource()
getResourceAsStream()
返回非空值。您只需在调试器等待时更改代码,然后选择
getClass().getResource()
方法调用并右键单击“Inspect”查看值。一般来说,Java名称解析是不可预测和不可靠的——它没有实际的规则——因此您只需通过反复试验来探索各种可能性,直到找到问题所在。调试名称解析问题的最简单方法是在
ImageIO.read()
上设置一个断点,并尝试许多不同的路径,直到
getResource()
getResourceAsStream()
返回非空值。您只需在调试器等待时更改代码,然后选择
getClass().getResource()
方法调用并右键单击“检查”一般来说,Java名称解析是不可预测和不可靠的——没有实际的规则——因此您只需通过反复试验来探索各种可能性,直到找到正确的方法。