0

我正在通过反射调用一个方法,这会引发异常。

但是,当我通过

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 -->在 Eclipse 中引用项目 A

Class ReflectedClass{

 List<String> nameList = null;

 public void reflectedMethod(){

     nameList.add("Hello");
    }      
}
4

1 回答 1

8

在您打电话的特定地点:

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

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

iTE.getCause().getStackTrace();

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

于 2013-01-30T06:58:56.673 回答