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

标签 java exception javax.imageio

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

ImageIO.write() API 应该抛出 IOException 但为什么我得到 NPE

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

最佳答案

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

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);
}

给予

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,然后当 ImageIO.write 试图关闭未打开的流时 NPE 出现。

为什么异常会被这么残酷地压制,我不知道。代码片段为

try {
 return new FileImageOutputStream((File)output);
} catch (Exception e) {
 e.printStackTrace();
 return null;
}

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

关于java - 使用 "ImageIO.write()"API 调用我得到 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11153200/

相关文章:

java - 为什么这个 GIF 在使用 Java ImageIO 调整大小时最终变成黑色方 block

java - 在 multiautocompletetextview 中输入双空格来替换逗号

java - 如何指定从中获取 EJB 的服务器?

java - 代码不读取或基本上跳过我的异常 (Jgrasp)

StopExpectingException 之后的 Delphi 7 Dunit 检查未按我的预期工作

java - Java 高级成像 (JAI) 选项?

java - 返回字符串数组

java - robots.txt 解析器 java

python - 处理捕获的异常并将其引发到 try block 之外的正确方法是什么

java - ImageIO 读取是否意味着抗锯齿缩放?