Netty を使用してアプリケーションを開発していますが、接続タイムアウトなどの場合にスローされるクライアント側で ConnectException を処理する必要があります。
これがコードです
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.FutureListener;
public class ConnectTest {
public static void main(String[] args) throws Exception {
Bootstrap b = new Bootstrap();
b.group(new NioEventLoopGroup()).channel(NioSocketChannel.class)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
}
});
final ChannelFuture f = b.connect("0.0.0.0", 8080);
f.addListener(new FutureListener<Void>() {
@Override
public void operationComplete(Future<Void> future) throws Exception {
if (!f.isSuccess())
System.out.println("Test Connection failed");
}
});
f.sync();
}
}
そして、これが結果です:
テスト接続に失敗しました スレッド「メイン」での例外 java.net.ConnectException: 接続が拒否されました: 詳細情報はありません: /0.0.0.0:8080 at sun.nio.ch.SocketChannelImpl.checkConnect(ネイティブメソッド) sun.nio.ch.SocketChannelImpl.finishConnect で (不明なソース) io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect (NioSocketChannel.java:208) で at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:287) io.netty.channel.nio.NioEventLoop.processSelectedKey (NioEventLoop.java:524) で io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:464) で io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:378) で io.netty.channel.nio.NioEventLoop.run (NioEventLoop.java:350) で io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) で java.lang.Thread.run で (不明なソース)
ご覧のとおり、リスナーは正常に動作しますが、いまだにスタック トレースが出力され、それをインターセプトする場所がわかりません。
ヒントはありますか?