vertx 监听端口的错误怎样监听。

@Override
    public void start() throws Exception {
        try{
            vertx.createHttpServer()
                    .requestHandler(req -> req.response().end("hello"))
                    .listen(8080)
                    .connectionHandler( r-> {
                        System.out.println(r.remoteAddress());
                    })
                    .close( r -> {
                        System.out.println("closed");
                    });
        }catch (Exception e){
            //e.printStackTrace();
            System.out.println("eeee");
        }


    }

我想捕获 java.net.BindException: Address already in use: bind 该怎么写。

阅读 3.7k
1 个回答

首先你必须要理解vertx的设计——全异步非阻塞设计,因此vertx的方法几乎都是异步的,你无法像同步方法这样try-catch捕获异常。

vertx将异常信息全部放在了回调中,因此你必须在回调函数中获取异常信息。参考官方文档: http://vertx.io/docs/vertx-co...

稍作修改即可:

HttpServer server = vertx.createHttpServer();
server.listen(8080, "myhost.com", res -> {
  if (res.succeeded()) {
    System.out.println("Server is now listening!");
  } else {
    System.out.println("Fatal error: " + res.cause());
    vertx.close();  // 严重错误,不应该继续运行,需要关闭vertx实例
    System.exit(-1);  // 自定义程序非正常退出码,这里定义255
  }
});

AsyncResultcause()方法即可拿到Throwable对象,进而得到Exception类型和内容。

强烈建议详读vertx官方文档中的core部分,对理解vertx的框架设计非常重要。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题