我通过反射调用一个方法,它抛出一个异常。
然而,当我通过
获得堆栈跟踪时StackTraceElement[] elements = Thread.currentThread().getStackTrace();
我没有得到整个堆栈跟踪到反射方法。它只获得堆栈跟踪,以实现反射。
反映的课程完全在另一个项目中。
编辑:添加代码段
项目A
Class ReflectionImpl {
public void callMethodsviaReflection{
try{
// Reflection code to call the method
}catch(InvocationTargetException iTE){
StringBuilder errorLogBuilder = new StringBuilder();
errorLogBuilder.append(ex.toString());
errorLogBuilder.append("\n");
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
for (int i=0;i<elements.length;i++) {
errorLogBuilder.append((elements[i].toString()));
errorLogBuilder.append("\n");
}
System.out.println(errorLogBuilder.toString());
}
}
}
项目B - &gt; 在Eclipse中引用项目A
Class ReflectedClass{
List<String> nameList = null;
public void reflectedMethod(){
nameList.add("Hello");
}
}
答案 0 :(得分:8)
在你打电话的特定地点:
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
您的“反射调用”已经完成,这反映在您从通话中回来的调用堆栈中。听起来更像你想要的:
iTE.getCause().getStackTrace();
这将为您提供调用堆栈 ,包括 实际抛出异常的方法。