SSp*_*oke 1 java string exception printstacktrace
我有类似的东西.
void func() {
try {
//socket disconnects in middle of ..parsing packet..
} catch(Exception ex) {
if(!ex.getMessage().toString().equals("timeout") || !ex.getMessage().toString().equals("Connection reset")) {
debug("Exception (run): " + ex.getMessage());
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
为什么当我得到连接重置异常或超时异常时,它仍然在条件内.我尝试没有toString,没有运气.
您不应该捕获所有异常,然后测试异常的错误消息.相反,只捕获您打算处理的异常 - 例如SocketTimeoutException.
catch (SocketTimeoutException ex)
{
// Do something...
}
Run Code Online (Sandbox Code Playgroud)
使用当前代码,您可能会捕获一些您不期望的其他类型的异常.目前,您将忽略此异常,甚至不记录它.这可能使调试正在进行的操作非常困难.如果您有一个无法处理的异常,则应重新抛出或记录它.
我想抓住所有例外情况
如果您真的想这样做,那么您可以按如下方式编写代码:
catch (SocketTimeoutException ex)
{
// Do something specific for SocketTimeoutException.
}
catch (Exception ex)
{
// Do something for all other types of exception.
}
Run Code Online (Sandbox Code Playgroud)
关于你的具体错误,你写了:
!a.equals(b) || !a.equals(c)
Run Code Online (Sandbox Code Playgroud)
此表达式始终求值为true.你的意思是:
!a.equals(b) && !a.equals(c)
Run Code Online (Sandbox Code Playgroud)
或等效地:
!(a.equals(b) || a.equals(c))
Run Code Online (Sandbox Code Playgroud)
请注意,通过按照上面的建议重写代码,您可以完全避免编写这个复杂的布尔表达式.