Java:InvocationTargetException

时间:2011-06-17 15:24:32

标签: java reflection

我在Java中动态创建类并尝试在其中调用方法,但是,有时我会得到java.lang.reflect.InvocationTargetException

PageGenerator1.java(动态创建)

import java.io.PrintStream;
import java.util.Map;
public class PageGenerator1 implements DynamicPageGenerator {
    public PageGenerator1() {
    }

    @Override
    public void generate(PrintStream out, Map<String,String> params, Session session) {
        out.print("<html>\r\n<body>\r\n");
        if (session.get("counter") == null) {
                session.set("counter", 2);
                out.println("<h1>Hi "+params.get("name")+" this is your first visit</h1>");
        } else {
                out.println("<h1>This is your "+session.get("counter")+" visit</h1>");
                session.set("counter", 1+((Integer)session.get("counter")));
        }
        out.print("\r\n</body>\r\n</html>");
    }
}

我试图像这样调用它:

    logger.info(
        "Attempting to invoke the method " + generateMethod + " with an instance of " + generatedClassName + "with the following parameters:\n" +
            "\tparams: " + params + "\n" +
            "\tcookieSession: " + cookiesSession
    );

    generateMethod.invoke(Class.forName(generatedClassName).newInstance(), ps, params, cookiesSession);

这是我得到的日志条目:

  

信息:试图调用方法
  public void cs236369.webserver.requesthandlers.tsp.PageGenerator1.generate(java.io.PrintStream,java.util.Map,cs236369.webserver.requesthandlers.tsp.Session)
  有一个实例   cs236369.webserver.requesthandlers.tsp.PageGenerator1
  具有以下参数:
          参数:{name=Amir}
          cookieSession:{counter=5}

我得到的例外没有消息,我没有反思等经验,所以我不确定错误是什么意思。你能帮我解释一下我做错了什么吗?

3 个答案:

答案 0 :(得分:22)

InovcationTargetException意味着您调用的方法引发了异常。要弄清楚方法本身存在什么问题,请围绕try-catch块包装invoke方法调用并记录invocationTargetException.getTargetException()

我可以在generateMethod中看到几个可能有错误的地方。 Session可以为null,session.getCounter()被强制转换为Integer - 那里可能有classcastexception。

答案 1 :(得分:0)

在调用代码和生成块中放置try catch块。此外,您还可以在调试器中逐步执行这些方法。

答案 2 :(得分:0)

可能是因为参数错误。首先,检查您的参数。使用e.getCause()。getCause()来获取此背后的实际原因。