【问题标题】:Uncaught java.nio.channels.UnresolvedAddressException未捕获的 java.nio.channels.UnresolvedAddressException
【发布时间】:2014-02-16 13:29:50
【问题描述】:

使用 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;
}

如果远程地址是错误的 DNS(例如),似乎不会捕获异常。我错过了什么?

【问题讨论】:

    标签: java sockets exception nio


    【解决方案1】:

    UnresolvedAddressException不是IOException 的子类,这就是为什么如果它被抛出你就抓不到它的原因。

    UnresolvedAddressExceptionIllegalArgumentException的子类,如图here,所以试着抓一下:

    • UnresolvedAddressException 本身,因为最好先捕获最具体的异常类型
    • Exception 如果你真的不关心你捕获的异常,你可以随时停止程序或解决这个问题

    编辑:您可能错过了该异常,因为编译器没有强制您捕获它。那是因为UnresolvedAddressException 是从RuntimeException 派生的,这种异常类型会在执行期间打动你。来自RuntimeException 的异常不是,例如IOException必须被捕获,这就是为什么你的编译器可能告诉你将你的代码包装成一个try-首先捕获块。

    【讨论】:

      【解决方案2】:

      UnresolvedAddressException 不是 IOException 的子级。 UnresolvedAddressException 扩展了 RuntimeException。 您可以尝试使用 RuntimeException 添加 catch 闭包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 2012-09-22
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多