He's right. For example, this code:
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)
The reason is that FileImageOutputStreamSpi.createOutputStreamInstance
swallows a FileNotFoundException and then the NPE comes in when ImageIO.write
tries to close a stream that doesn't open.
Why the exception is suppressed so cruelly, I do not know. Code snippet
try { return new FileImageOutputStream((File)output); } catch (Exception e) { e.printStackTrace(); return null; }
The only solution is to check the path before trying to use ImageIO.
source share