未捕获的java.nio.channels.UnresolvedAddressException

Ste*_*tef 1 java sockets nio exception

使用Java 1.7,以下代码

try
{
  sck = SocketChannel.open();
  sck.configureBlocking(false);

  sck.connect(new java.net.InetSocketAddress(**<bad remote ip address>**, remote_port));
  sel = Selector.open();

  ...
}
catch (IOException e)
{
  return false;
}
Run Code Online (Sandbox Code Playgroud)

如果远程地址是一个坏DNS(例如),似乎没有捕获异常.我错过了什么?

web*_*ter 5

UnresolvedAddressException不是一个子类IOException,这就是为什么你会不会抓住它,如果它抛出.

UnresolvedAddressException是的子类IllegalArgumentException,如图所示这里,所以尽量捕捉:

  • UnresolvedAddressException 本身,因为首先捕获最具体的异常类型总是更好的做法
  • Exception 如果你真的不关心你捕获的异常,因为你总是可以暂停程序或解决这个问题

编辑:您可能错过了该异常,因为编译器没有强制您捕获它.那是因为它UnresolvedAddressException在执行过程中RuntimeException引起攻击的异常类型.不必从中获取异常,例如,必须捕获,这就是为什么您的编译器可能会告诉您首先将代码包装到try-catch块中.RuntimeExceptionIOException