Java:InvocationTargetException

我在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 params, Session session) { out.print("\r\n\r\n"); if (session.get("counter") == null) { session.set("counter", 2); out.println("

Hi "+params.get("name")+" this is your first visit

"); } else { out.println("

This is your "+session.get("counter")+" visit

"); session.set("counter", 1+((Integer)session.get("counter"))); } out.print("\r\n\r\n"); } }

我试图像这样调用它:

  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}

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

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

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

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

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