在Java中使用e.printStackTrace()

时间:2011-08-18 00:03:36

标签: java ioexception printstacktrace

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

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

我正在使用NetBeans IDE,出于某种原因,printStackTrace在一条波浪线中加下划线。当我按Alt + Enter时,它表示应删除Throwable.printStackTrace()。这是什么意思?任何人都可以提供更多见解,这可能意味着什么?或者我可以忽略这个吗?

谢谢!

5 个答案:

答案 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();

这些可能有所帮助: