Java错误捕获问题

时间:2012-05-12 21:13:13

标签: java class try-catch system.out

我设置了try / catch事件,它将捕获所有异常,然后显示错误。

这是我的代码:

try {
    //CODE THAT COULD ERROR HERE
} catch (final Exception e) {
    System.err.println("Unexpected error: " + e.getStackTrace()[0]);
}

上面的代码给了我有错误的LAST类。如何检测出错误的“我的程序”的最后一类?

示例输出:“意外错误:package.ClassName.method(ClassName.java:46)”

我希望它输出我的程序中有错误的行,而不是因为我的程序错误编译的内置java类的行。

3 个答案:

答案 0 :(得分:3)

e.printStackTrace()

可能会让你更快乐。或者打印适当方法提供的堆栈跟踪条目数组的顶部。

http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html#getStackTrace()

返回它们。第一个是你要求的。

答案 1 :(得分:1)

您可以使用getStackTrace获取StackTraceElement个实例数组,并根据您的包和/或类名对其进行过滤(对每个元素使用getClassName,这样您就可以该堆栈跟踪框架的完全限定类名称)。这样你就可以将它编成你的代码,而不是发生异常的JDK类。

答案 2 :(得分:1)

        try {
            //error producing code
        } catch (Exception e) {
            for (StackTraceElement s : e.getStackTrace()) {
                if (!s.getClassName().startsWith("java.")) {
                    System.out.println("file name: " + s.getFileName());
                    System.out.println("class name: " + s.getClassName());
                    System.out.println("method name: " + s.getMethodName());
                    System.out.println("line number: " + s.getLineNumber());
                    System.out.println();
                    //break; // will be the highest non java package...
                }
            }
        }

您当然可以将其切换为特定于程序包if (s.getClassName().startsWith("com.company")) {,以便它不会返回第三方库或sun包或其他非Java包中的内容。