在Java中使用e.printStackTrace()

O_O*_*O_O 61 java ioexception printstacktrace

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

try
{ 
//try to do something there
}
catch (IOException e)
{
//handle the exception 
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Pab*_*dez 43

尝试:

e.printStackTrace(System.out);
Run Code Online (Sandbox Code Playgroud)

  • 哈克!这并没有真正解决问题,因为它只是阻止Netbeans显示它.这仍将输出到默认错误流. (8认同)

Mga*_*erz 21

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

  • 使用类似log4j的日志记录框架就是这样一种更好的方法。 (3认同)

dee*_*see 14

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


Art*_*ves 10

e.printStackTrace();

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

NetBeans应该警告你.关于它的好习惯是记录消息.遵循相同的参考:

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

编辑 请参阅下面的第一条评论更多信息.

  • 不,它打印到默认的Errorstream,它是一个单独的流,别名为FileDescriptor,可以通过管道传输到一个单独的文件:`java YourClass 1> file.out 2> file.err` - e.printStackTrace打印到'file .err',而不是'file.out'. (6认同)
  • 并不总是一个好习惯.此控制台可能是您无法访问的Web服务器中的控制台.有时最好将此堆栈跟踪也转储到应用程序的当前日志中,特别是在Web应用程序中. (2认同)