在我的應用程序中,我試圖使用ImageIO
將BufferedImage
保存爲PNG文件。該文件由用戶選擇,因此我需要對可能發生的錯誤做出反應(例如,用戶嘗試保存在他沒有寫入權限的位置)。但是我無法捕捉到發生的IOException
。Java ImageIO:異常奇怪
以下代碼顯示了該問題。嘗試保存到「/ foo」應該爲* nix系統上的大多數用戶拋出異常,因爲它們在根目錄中沒有寫權限。
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class IOTest {
public static void main(String[] args) {
BufferedImage img = new BufferedImage(640, 480,
BufferedImage.TYPE_INT_RGB);
try {
File f = new File("/foo");
ImageIO.write(img, "png", f);
} catch (IOException e) {
System.out.println("Caught IOException!");
}
}
}
但是,沒有發現異常。輸出:
java.io.FileNotFoundException: /foo (Permission denied)
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 IOTest.main(IOTest.java:16)
Exception in thread "main" java.lang.NullPointerException
at javax.imageio.ImageIO.write(ImageIO.java:1538)
at IOTest.main(IOTest.java:16)
注意FileNotFoundException
是IOException
子類,所以它應該被逮住。第二個catch塊沒有幫助:
catch (FileNotFoundException e) {
System.out.println("Caught FileNotFoundException!");
} catch (IOException e) {
System.out.println("Caught IOException!");
}
我在做什麼錯?
沒有「造成」來證明您的結論。 –