在Java中使用e.printStackTrace()

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

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

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

谢谢!

这只是一个build议。 在日食中它是好的 – 我相信这只是IDE告诉你,有更多的传统方法来做到这一点,就像其他的一些答案。 我发现它对于debugging是有用的,而且你应该告诉用户什么时候会发生致命错误,使用debugging模式(如控制台开关-d)来收集这些日志。

尝试:

 e.printStackTrace(System.out); 

这可能是因为printStackTrace()并没有真正处理错误,因为它只是在控制台中转储堆栈。 它作为一个占位符,直到你用适当的error handling(如果需要的话)replace它,并用某种types的logging器replace输出。

e.printStackTrace();

是不是很好的做法,因为它打印在默认的ErrorStream,大部分时间是控制台!

NetBeans应该警告你。 关于它的好习惯是logging信息。 遵循相同的参考:

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

编辑看到第一个评论以下更多的信息。

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

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

我自己使用(大部分时间) logger.log(Level.SEVERE, <exception>.getMessage(), <exception>);

当netbeansbuild议你Surround Statement with try-catch ”来处理exception的“ 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();更好ex.printStackTrace();

这些可能有助于:

  • exception处理的最佳实践
  • Javarevisited-logging的 。
  • Java日志框架中的最新选项是什么?
  • 基准testingJava日志框架。