使用“ImageIO.write()”API调用我得到空指针异常
与ImageIO.write()
API调用时,我得到NullPointerException
当我通过一个不存在的路径如"\\abc\abc.png"
。我通过不存在的路径特意来测试一些而是获得FileNotFoundException
,我得到NPE
。这是为什么?使用“ImageIO.write()”API调用我得到空指针异常
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异常,然后NPE来当ImageIO.write
试图关闭流是没开。
为什么异常被抑制,残酷,我不知道。代码片段是
try { return new FileImageOutputStream((File)output);
} catch (Exception e) {
e.printStackTrace();
return null;
}
唯一的解决办法是试图使用的ImageIO之前验证路径。
回答:
我发现对于NPE在这个线程中提到的问题的原因。彼得赫尔说得绝对正确
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); }
这正是我的代码的样子。感谢彼得突出显示。
此问题的原因是新的FileImageOutputStream()抛出FileNotFoundException,但是一些Sun程序员去了并捕获了异常,打印了堆栈跟踪并返回null。这就是为什么不能再捕捉FileNotFoundException - 它已经打印出来了。不久之后,返回的null值将导致NullPointerException异常,这是从我调用的方法抛出的异常。当印刷异常的堆栈跟踪,我可以看到FileNotFoundException异常与NPE沿上面提到的原因。
-Nayan
以上是 使用“ImageIO.write()”API调用我得到空指针异常 的全部内容, 来源链接: utcz.com/qa/259141.html