为什么 NetBeans IDE 在打印 Java 堆栈跟踪时提出标志?
try {
//try to do something there
} catch (IOException e) {
//handle the exception
e.printStackTrace();
}
出于某种原因,
printStackTrace
在波浪线中加了下划线。当我进行快速修复 (Alt+Enter
) 时,NetBeans 报告 Throwable.printStackTrace()
应被删除。
这是什么意思?
尝试:
e.printStackTrace(System.out);
这只是一个建议。在 Eclipse 中,这很好 - 我相信这只是 IDE 告诉您有更传统的方法可以做到这一点,就像其他一些答案一样。 我发现它对于调试很有用,并且您应该告诉用户何时将发生致命错误,使用调试模式(如控制台开关 -d)来收集这些日志。
这可能是因为
printStackTrace()
并没有真正处理错误,而只是将堆栈转储到控制台中。它充当占位符,直到您用适当的错误处理(如果需要的话)替换它并用某种记录器替换输出。
e.printStackTrace();
这不是一个好的做法,因为它在默认的 ErrorStream 中打印,而大多数情况下是控制台!
NetBeans 应该警告您这一点。最好的做法是记录消息。遵循相同的参考:
http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html
编辑 请参阅下面的第一条评论以获取更多信息。
仅打印堆栈跟踪是不够的。打印异常的堆栈跟踪本身并不意味着它是完全不好的做法,但在发生异常时仅打印堆栈跟踪是一个问题。
始终记录异常(使用良好的日志框架),但不要将其暴露给最终用户。并确保仅在开发模式下显示堆栈跟踪。
我自己使用(大部分时间)
logger.log(Level.SEVERE, <exception>.getMessage(), <exception>);
。
当netbeans建议你处理异常'
Surround Statement with try-catch
'时,如果你点击这个,它就会生成):
try {
//something need to be handle(exception that throw)
} catch (SQLException ex) {
Logger.getLogger(ClassName.class.getName()).log(Level.SEVERE, null, ex);
}
哪个比
ex.printStackTrace();
更好。
这些可能有帮助: