java - 当我尝试创建图像文件时,try-catch 没有捕获 IOException

标签 java eclipse exception try-catch

这是一个图像处理应用程序。我下面显示的代码用于创建图像文件并将完全处理的 BufferedImage 保存到其中。

public static void saveAnh(BufferedImage anhHoanTat) {
    String dc;
    ui.save();
    input.nextLine();
    diachiluuanh = input.nextLine();
    dc = diachiluuanh 
        + diachi.substring(diachi.lastIndexOf("\\"), diachi.lastIndexOf(".")) 
        + "_ML."+ diachi.substring(diachi.lastIndexOf(".")+1);
    File anhDaXuLy = new File(dc);
    try {
        ImageIO.write(anhHoanTat,diachi.substring(diachi.lastIndexOf(".")+1), anhDaXuLy);
    } catch (IOException e) {
        ui.warningSave();
    }
    ui.hoanTat(dc);
}

除了没有捕获 IOException 之外,一切正常。系统显示了错误,它是 FileNotFoundException,据我所知,该异常也是一个 IOException

系统显示截图:

Screenshot of what the system showed

然后我 try catch 确切的一个 catch (FileNotFoundException e),但 Eclipse 会让我将其更改回 IOException

Eclipse 提示我的屏幕截图:

Screenshot of what Eclipse prompted me

Screenshot of what Eclipse prompted me

(它告诉我,FileNotFoundException 已经被 IOException 捕获,所以最终我不得不删除它,这几乎回到了我开始的地方。)

注意:之后我添加了 NullPointerException ,代码捕获了它,但仍然没有捕获 IOException catch (NullPointerException | IOException e)

系统显示截图:

Screenshot of what the system showed

最佳答案

发生的情况是,您正确捕获了异常,并打印了它(我假设这就是您在 ui.warningSave(); 方法上所做的事情),但随后您没有停止您的方法(返回、退出、抛出异常),因此程序到达最后一行,在 catch (ui.hoanTat(dc);)

之后

Eclipse 向您显示的编译错误:

由于 ImageIO.write() 抛出 IOException,因此您不能仅捕获 FileNotFoundException,因为它并未涵盖所有情况。

此外,编写 catch (FileNotFoundException | IOException e) 也是错误的,因为 FileNotFoundException 是多余的 - 它在扩展时已被 IOException 覆盖。

关于java - 当我尝试创建图像文件时,try-catch 没有捕获 IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47488639/

相关文章:

java - intellij idea 14中的Maven配置

java - Android apt 从 1.4 升级到 1.7 版本

java - 在主 Activity 中实例化的 TextView 上设置文本

eclipse - 无法使用Java 1.8在Eclipse中构建Grails应用

c++ - 使用普通异常类有什么意义?

java - Hibernate 刷新速度不够快,无法捕获数据库异常

java - 从 .jar 文件复制文件夹

java - 按特殊按钮退出

java - 如何解决 "java.lang.UnsatisfiedLinkError: no AspriseOCR in java.library.path.."

c# - C#获取进程id异常