Java中Reflected方法的异常堆栈跟踪

时间:2013-01-30 06:38:15

标签: java reflection stack-trace

我通过反射调用一个方法,它抛出一个异常。

然而,当我通过

获得堆栈跟踪时
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");
    }      
}

1 个答案:

答案 0 :(得分:8)

在你打电话的特定地点:

StackTraceElement[] elements = Thread.currentThread().getStackTrace();

您的“反射调用”已经完成,这反映在您从通话中回来的调用堆栈中。听起来更像你想要的:

iTE.getCause().getStackTrace();

这将为您提供调用堆栈 ,包括 实际抛出异常的方法。