使用"ImageIO.write()"API调用,我得到NullPointerException

Nay*_*oni 9 java exception javax.imageio

通过ImageIO.write()API调用,NullPointerException当我传递一个不存在的路径时,我得到了"\\abc\abc.png".我故意通过不存在的路径来测试一些东西但是没有得到FileNotFoundException,我得到了NPE.这是为什么?

ImageIO.write()API应该抛出,IOException但不是我得到的原因NPE.

我使用异常消息字符串在消息框中向用户显示它,但在这种情况下NPE.getLocalizedMessage()返回空字符串,因此弹出窗口是空的,只有一个图标.

Pet*_*ull 14

不过他对的.例如,这段代码:

public static void main(String[] args) throws IOException {
 BufferedImage image = new BufferedImage(32, 32, BufferedImage.TYPE_INT_ARGB);
 File out = new File("\\\\ABC\\abc.png");
 ImageIO.write(image, "png", out);
}
Run Code Online (Sandbox Code Playgroud)

java.io.FileNotFoundException: \\ABC\abc.png (The network path was not found)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
at javax.imageio.stream.FileImageOutputStream.<init>(FileImageOutputStream.java:69)
at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(FileImageOutputStreamSpi.java:55)
at javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:419)
at javax.imageio.ImageIO.write(ImageIO.java:1530)
at javaapplication145.JavaApplication145.main(JavaApplication145.java:24)
Exception in thread "main" java.lang.NullPointerException
at javax.imageio.ImageIO.write(ImageIO.java:1538)
at javaapplication145.JavaApplication145.main(JavaApplication145.java:24)
Run Code Online (Sandbox Code Playgroud)

原因是FileImageOutputStreamSpi.createOutputStreamInstance吞下FileNotFoundException然后在ImageIO.write尝试关闭未打开的流时出现NPE .

我不知道为什么例外被如此残忍地压制.代码片段是

try {
 return new FileImageOutputStream((File)output);
} catch (Exception e) {
 e.printStackTrace();
 return null;
}
Run Code Online (Sandbox Code Playgroud)

唯一的解决方案是尝试使用ImageIO 之前验证路径.