平时写java代码时,想看抛出的异常信息,来找出具体的异常点,我们常常会用Exception.toString ()或者 Exception.getMessage()来取得异常信息,再把它print到控制台,,但是这些信息只能告诉我们异常本身的信息,对我们找出异常点帮助并不太理想,所以我们会使用Exception.printStackTrace()方法,这样就可以在控制台输出非常详细的异常信息,甚至可以通过它跟踪到异常发生在某个类的第几行,这对我们非常有用。但是我们有时只想得到这些 StackTrace数据,通过其它方式表现出来(非控制台,如网页或GUI),这就有了这篇文章.回想一下,原来的日志工具log4、weblogic服务器、还有webshpere服务器等等好像都可以得到这些信息,所以就先直接在Exception类找找有没有直接的方法可以返回这些信息,看到getStackTrace()方法返回一个StackTraceElement对象的集合(原来怎么没注意到呢?),翻一下JDK,一看StackTraceElement类提供的方法(
String | getFileName() Returns the name of the source file containing the execution point represented by this stack trace element. |
int | getLineNumber() Returns the line number of the source line containing the execution point represented by this stack trace element. |
String | getMethodName() Returns the name of the method containing the execution point represented by this stack trace element. |
int | hashCode() Returns a hash code value for this stack trace element. |
boolean | isNativeMethod() Returns true if the method containing the execution point represented by this stack trace element is a native method. |
String | toString() |
public static void main(String[] args) {
try{
byte[] a=args[0].getBytes();
}catch (Exception ex){
ex.printStackTrace();
StackTraceElement [] messages=ex.getStackTrace();
int length=messages.length;
for(int i=0;i<length;i++){
System.out.println("ClassName:"+messages[i].getClassName());
System.out.println("getFileName:"+messages[i].getFileName());
System.out.println("getLineNumber:"+messages[i].getLineNumber());
System.out.println("getMethodName:"+messages[i].getMethodName());
System.out.println("toString:"+messages[i].toString());
}
}
}
Ok,秘密找到了,原来就这么回事。
以上内容转自:http://blog.youkuaiyun.com/haiquan968/article/details/4619737
下面自己写了一个得到异常详细信息的方法
public String getExceptionDetail(Exception e) {
StringBuffer stringBuffer = new StringBuffer(e.toString() + "\n");
StackTraceElement[] messages = e.getStackTrace();
int length = messages.length;
for (int i = 0; i < length; i++) {
stringBuffer.append("\t"+messages[i].toString()+"\n");
}
return stringBuffer.toString();
}