java无法捕获从该服务器引发的异常
我做过这样的事情:
try {
client = new Client(this, "192.168.0.108", 5204);
}catch(ConnectException e) {
e.printStackTrace();
}
IDE说:
Unreachable catch block for ConnectException. This exception is never thrown from the try statement body
但当我运行它并强制关闭程序(它运行的GUI窗口)时,它会从该代码行(客户端对象)生成异常
我知道在try-block中,我没有任何东西可以正式抛出异常,但在真正的情况下,异常是从该块中抛出的
如何捕获该异常
堆栈跟踪: https://prnt.sc/q9hzdp
# 1 楼答案
当我遇到这个问题时,我只是简单地检查了堆栈跟踪的字符串,寻找我需要拦截的特定异常,然后我有了一个方法来处理它。然而,我不是为“任务关键型”应用程序编写代码,我只是一个业余程序员。我认为第一个答案和第二个评论是最好的答案,其中Travieso提到了Javassist和GLIB的使用,但是在我的例子中,实现该解决方案的学习曲线太陡峭了
以下是我如何处理此问题的示例:
# 2 楼答案
您的IDE正在抱怨,因为您试图捕获的异常已经在客户端的构造函数中被捕获
摘自Client.java来源:
ConnectException扩展了IOException,因此处理库已捕获该异常。由于该异常不是rethrown,因此它不会传播到您的自定义try-catch,并使其成为冗余