63

这可能是一个新手问题,但希望你能帮助我。:) 我有这样的事情:

try
{ 
//try to do something there
}
catch (IOException e)
{
//handle the exception 
e.printStackTrace();
}

我正在使用 NetBeans IDE,由于某种原因,printStackTrace 在波浪线中带有下划线。当我按 Alt+Enter 时,它说 Throwable.printStackTrace() 应该被删除。这是什么意思?谁能提供更多的见解,这可能意味着什么?或者我可以忽略这个吗?

谢谢!

4

5 回答 5

45

尝试:

e.printStackTrace(System.out);
于 2011-08-18T00:06:20.393 回答
21

这只是一个建议。在 Eclipse 中它很好 - 我相信它只是 IDE 告诉你有更传统的方法可以做到这一点,就像其他一些答案一样。我发现它对调试很有用,并且您应该告诉用户何时会发生致命错误,使用调试模式(如控制台开关 -d)来收集这些日志。

于 2011-08-18T00:16:41.953 回答
14

这可能是因为printStackTrace()它并没有真正处理错误,因为它只是将堆栈转储到控制台中。它充当占位符,直到您用适当的错误处理(如果需要的话)替换它并用某种记录器替换输出。

于 2011-08-18T00:08:32.410 回答
10

e.printStackTrace();

这不是一个好的做法,因为它在默认的 ErrorStream 中打印,大多数时候是控制台!

NetBeans 应该会就此向您发出警告。关于它的好习惯是记录消息。遵循相同的参考:

http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html

编辑 请参阅下面的第一条评论以获取更多信息。

于 2011-08-18T00:08:42.010 回答
3

仅打印堆栈跟踪是不够的。打印异常的堆栈跟踪本身并不意味着它是完全不好的做法,但是在发生异常时仅打印堆栈跟踪是一个问题。

始终记录异常(使用良好的日志框架),但不要将它们暴露给最终用户。并确保仅在开发模式下显示堆栈跟踪。

我自己使用(大部分时间)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();.

这些可能会有所帮助:

于 2017-08-06T09:37:55.763 回答