With ImageIO.write()
API调用,我明白了NullPointerException
当我经过一条不存在的路径时,例如"\\abc\abc.png"
。我故意通过不存在的路径来测试某些东西,但没有得到FileNotFoundException
, I get NPE
。这是为什么?
ImageIO.write()
API 应该抛出IOException
但不明白为什么我得到NPE
.
我使用异常消息字符串在消息框中向用户显示它,但在这种情况下NPE.getLocalizedMessage()
返回空字符串,因此弹出窗口是空的,上面只有一个图标。
He is是的,不过。例如,这段代码:
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);
}
gives
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)
原因是FileImageOutputStreamSpi.createOutputStreamInstance
吞掉 FileNotFoundException 然后 NPE 出现ImageIO.write
尝试关闭未打开的流。
我不知道为什么异常会被如此残酷地压制。代码片段是
try {
return new FileImageOutputStream((File)output);
} catch (Exception e) {
e.printStackTrace();
return null;
}
唯一的解决办法是验证路径before尝试使用 ImageIO。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)