如何正确定义运行时加载的类的功能参数?

时间:2013-09-11 14:03:41

标签: java talend

我创建了一个应该在运行时加载的Talend作业。我正在代码中动态加载作业jar。加载后,我需要调用一个将执行该作业的函数。

要执行此操作,我已按照this问题的答案进行操作。但是当调用该函数时,我得到了java.lang.NoSuchMethodException。我认为问题出在函数的参数类型定义中,但我无法正确定义它。

这是我的代码:

String args[] = new String[7];
args[0] = "myParams";

File jobJar = new File("myjar.jar");
URL [] urls = new URL[1];
urls[0] = jobJar.toURI().toURL();

Class<?>[] params_type = new Class[]{args.getClass()}; //is it correct?

URLClassLoader child = new URLClassLoader(urls , this.getClass().getClassLoader());
Class classToLoad = Class.forName ("com.my.myTalendClass", true, child);
Method method = classToLoad.getDeclaredMethod ("runJobInTOS", params_type);
Object instance = classToLoad.newInstance();
Object result = method.invoke(instance,new Object[]{ args });

并且函数runJobInTOS作为参数接收字符串数组

1 个答案:

答案 0 :(得分:1)

为什么使用

Object result = method.invoke(instance,new Object[]{ args });

但不是

Object result = method.invoke(instance,args);

在您的代码中,您将二维数组传递给方法,而不是普通的字符串数组