0

我设置了一个 try/catch 东西,它将捕获所有异常,然后显示错误。

这是我的代码:

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

上面的代码给了我最后一个有错误的类。如何检测有错误的 MY PROGRAM 的最后一类?

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

我希望它输出有错误的程序行,而不是由于我的程序而出错的内置 java 类的行。

4

3 回答 3

3
e.printStackTrace()

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

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

归还他们。第一个是你所要求的。

于 2012-05-12T21:15:35.190 回答
1

您可以使用getStackTrace来获取实例数组StackTraceElement,并根据您的包和/或类名对其进行过滤(getClassName用于每个元素,这将为您提供该堆栈跟踪框架的完全限定类名)。这将让您将其筛选到您的代码,而不是异常起源的 JDK 类。

于 2012-05-12T21:29:40.487 回答
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 包中的东西。

于 2012-05-12T21:54:54.040 回答