有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中使用e.printStackTrace()的ioexception

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

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

我使用的是NetBeans IDE,出于某种原因,printStackTrace在一条弯曲的线条中加了下划线。当我按Alt+Enter时,它显示为Throwable。应删除printStackTrace()。这是什么意思?有谁能更深入地了解这可能意味着什么?或者我可以忽略这个

谢谢


共 (5) 个答案

  1. # 1 楼答案

    e.printStackTrace();

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

    NetBeans应该提醒你这一点。关于它的良好实践是记录消息。遵循相同的参考:

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

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

  2. # 2 楼答案

    试试看:

    e.printStackTrace(System.out);
    
  3. # 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();

    这些可能有助于:

  4. # 4 楼答案

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

  5. # 5 楼答案

    这可能是因为printStackTrace()实际上并没有像在控制台中转储堆栈那样处理错误。它充当占位符,直到用正确的错误处理(如果需要的话)替换它,并用某种记录器替换输出