我设置了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类的行。
答案 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包中的内容。