在 Java 中使用 e.printStackTrace()

问题描述 投票:0回答:5

为什么 NetBeans IDE 在打印 Java 堆栈跟踪时提出标志?

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

出于某种原因,

printStackTrace
在波浪线中加了下划线。当我进行快速修复 (
Alt+Enter
) 时,NetBeans 报告
Throwable.printStackTrace()
应被删除。 这是什么意思?

java netbeans-8 ioexception throwable printstacktrace
5个回答
47
投票

尝试:

e.printStackTrace(System.out);

21
投票

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


14
投票

这可能是因为

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


12
投票

e.printStackTrace();

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

NetBeans 应该警告您这一点。最好的做法是记录消息。遵循相同的参考:

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

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


4
投票

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

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

我自己使用(大部分时间)

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();
更好。

这些可能有帮助:

© www.soinside.com 2019 - 2024. All rights reserved.