Java 在catch块中未识别UnknownHostException

Java 在catch块中未识别UnknownHostException,java,exception,exception-handling,Java,Exception,Exception Handling,我代码中的一个方法抛出UnknownHostException异常 我首先有一个catch块,如下所示: catch (Exception e) { // TODO Auto-generated catch block System.out.println("Custom Message "+e.getMessage()); if(e instanceof java.net.UnknownHostException){ System.out.println("Unknow

我代码中的一个方法抛出
UnknownHostException
异常

我首先有一个
catch
块,如下所示:

catch (Exception e) {
  // TODO Auto-generated catch block
  System.out.println("Custom Message "+e.getMessage());
  if(e instanceof java.net.UnknownHostException){
      System.out.println("Unknown Host Ex");
  }else{
      System.out.println("OTHER ERROR");
  }
}
我面临着这样一个问题:如果条件的计算结果从来都不是真的,因此我无法输出存在某个主机错误

您可以看到,我有一个
sysout
,就在打印这个的前面:

Custom Message ; nested exception is: 
    java.net.UnknownHostException: abc.xyz

在那之后,我编写了一个单独的catch块来处理
UnknownHostException
,但它仍然没有被捕获。

很显然,您的
UnknownHostException
被包装在其他一些异常中。换句话说,上面的一些代码捕获
未知后异常
并抛出:

throw new SomeOtherException("Custom Message", unknownHostEx);
打印
e.getClass()
以查看正在包装它的异常类型。您也可以尝试:

if(e.getCause() != null && e.getCause() instanceof UnknownHostException)
但是很难看

顺便说一句,您应该避免使用
instanceof
,并让
catch
找出异常本身(但对您的情况没有帮助):


UnknownHostException
嵌套在另一个
Exception
中,因此它可能不是它的实例,但它只包含它。你可能最终会检查
e.getCause()

是的,它有效我检查了这个类,它不是
UnknownHostException
,非常感谢你的回答
catch (java.net.UnknownHostException e) {
      System.out.println("Unknown Host Ex");
}
catch (Exception e) {
      System.out.println("OTHER ERROR");
}