这可能是一个新手问题,但希望你能帮助我。 :)我有这样的事情:
try
{
//try to do something there
}
catch (IOException e)
{
//handle the exception
e.printStackTrace();
}
我正在使用NetBeans IDE,出于某种原因,printStackTrace在一条波浪线中加下划线。当我按Alt + Enter时,它表示应删除Throwable.printStackTrace()。这是什么意思?任何人都可以提供更多见解,这可能意味着什么?或者我可以忽略这个吗?
谢谢!
答案 0 :(得分:41)
尝试:
e.printStackTrace(System.out);
答案 1 :(得分:21)
这只是一个建议。在eclipse中它很好 - 我相信它只是IDE告诉你有更多的传统方法,就像其他一些答案一样。 我发现它对调试很有用,你应该在发生致命错误时告诉用户,使用调试模式(如控制台开关-d)来收集这些日志。
答案 2 :(得分:14)
这可能是因为printStackTrace()
并没有真正处理错误,因为它只是在控制台中转储堆栈。它充当占位符,直到您用适当的错误处理替换它(如果需要它)并用某种记录器替换输出。
答案 3 :(得分:9)
e.printStackTrace();
不是很好的做法,因为它打印在默认的ErrorStream中,大部分时间都是控制台!
NetBeans应该警告你。关于它的好习惯是记录消息。遵循相同的参考:
http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html
修改强> 请参阅下面的第一条评论以获取更多信息。
答案 4 :(得分:3)
仅打印堆栈跟踪是不够的。打印异常的堆栈跟踪本身并不意味着它是完全不好的做法,但是在发生异常时仅打印堆栈跟踪是一个问题。
始终记录异常(使用好的logging framework),但不要将它们公开给最终用户。并确保仅在开发模式下显示堆栈跟踪。
我自己使用(大部分时间)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();
。
这些可能有所帮助: