如何同时处理 IOException 和 IIOException

Posted

技术标签:

【中文标题】如何同时处理 IOException 和 IIOException【英文标题】:How to handle both IOException and IIOException at the same time 【发布时间】:2016-09-16 09:09:41 【问题描述】:

谁能帮我解决如何同时捕获 IOException 和 IIOException,因为我需要区分图像格式和图像加载错误。

这样的事情不起作用,因为我没有捕获 IOException。

catch (IIOException e)

  System.out.println("Invalid image format: " + e.getMessage());

  Throwable t = e.getCause();
  if ((t != null) && (t instanceof IOException)) 
    System.out.println("Unable to load image: " + e.getMessage());
  

【问题讨论】:

注意:如果t == null (question),t instanceof IOException 将返回 false,因此您无需先检查。 【参考方案1】:

你有没有尝试过这样的事情

catch(IOException e)
    
        if(e instanceof IIOException)
        
            System.out.println("Invalid image format: " + e.getMessage());
        else
        
            System.out.println("Unable to load image: " + e.getMessage());
        
    

【讨论】:

【参考方案2】:

这就是为什么我们有单独的 catch 语句:

try 


catch (ExceptionTypeA e1)  
catch (ExceptionTypeB e2)  


  try 
      bim=ImageIO.read(new File(....));
      int[] a=2, 2, 3,4 ;
      a[7]=4;
  
  catch (ArrayIndexOutOfBoundsException ex2)  System.err.println("error 2 "+ex2); 
  catch (Exception ex)  System.err.println("error 1 "+ex); 

例外需要按照具体的顺序给出;即在你的情况下,

  catch (IIOException ex)  System.err.println("error 1 "+ex); 
  catch (IOException ex2)  System.err.println("error 2 "+ex2); 

【讨论】:

以上是关于如何同时处理 IOException 和 IIOException的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会得到“未处理的异常类型 IOException”?

解决Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory

Proguard 错误:“处理任务 java.io.IOException 时出现异常:请先更正上述警告”

IOException: UT010029: Stream is closed 异常处理

Apache POI在多线程中的tmp目录上获取java.io.IOException

如何在点击时同时过滤和处理项目