尽管如此,他是正确的。例如,这段代码:
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
尝试关闭未打开的流时就会出现NullPointerException异常。
至于为什么如此残忍地抑制异常,我不知道。代码片段如下:
try {
return new FileImageOutputStream((File)output);
} catch (Exception e) {
e.printStackTrace();
return null;
}
唯一的解决方法是在尝试使用ImageIO之前验证路径。
File
或URL
。 2)如果使用File
,请从JFileChooser
获取它。更容易为用户和更可靠。3)"\\abc\abc.png"
不是任何操作系统上的有效文件路径,并且我认为它不会编译。停止浪费时间(更重要的是我们的时间),通过键入“类似于”所使用的代码。为了更快地获得更好的帮助,请发布SSCCE。 - Andrew Thompson