Java在运行时加载外部类

Java在运行时加载外部类,java,class,url,methods,jar,Java,Class,Url,Methods,Jar,我还有另一个问题,我找不到答案。我希望在运行时从外部jar中获取一个类,并从中获取一个方法并向其传递一个参数。下面的代码当前打开jar并获取类并运行该方法,但当我尝试向其传递参数时,该方法运行,但我得到了InvocationTargetException。有什么想法吗 这是我的密码: String path = "test.jar"; URL[] classes = {new File(path).toURI().toURL()}; URLClassLoader chil

我还有另一个问题,我找不到答案。我希望在运行时从外部jar中获取一个类,并从中获取一个方法并向其传递一个参数。下面的代码当前打开jar并获取类并运行该方法,但当我尝试向其传递参数时,该方法运行,但我得到了InvocationTargetException。有什么想法吗

这是我的密码:

    String path = "test.jar";
    URL[] classes = {new File(path).toURI().toURL()};
    URLClassLoader child = new URLClassLoader (classes, this.getClass().getClassLoader());
    try {
        Class classToLoad = Class.forName("testClass", true, child);
        Method method = classToLoad.getDeclaredMethod ("testMethod", String.class);
        Object instance = classToLoad.newInstance();
        Object result = method.invoke(instance, new String("Test from method!"));
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
下面是它抛出的错误:

Test from method!
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at Load.loadJar(LoadTerrem.java:33)
    at Load.<init>(LoadTerrem.java:18)
    at Load.main(LoadTerrem.java:13)
Caused by: java.lang.NullPointerException
    at MenuSingleplayer.LoadWorlds(MenuSingleplayer.java:210)
    at MenuSingleplayer.setup(MenuSingleplayer.java:89)
    at M0.LoadGame(M0.java:76)
    ... 7 more

有什么想法吗?谢谢

问题出在menusingelplayer.LoadWorlds方法中。上面说那里发生了NPE。这与反思无关。没关系:

Caused by: java.lang.NullPointerException
at MenuSingleplayer.LoadWorlds(MenuSingleplayer.java:210)
当被调用的方法(
testMethod
在您的例子中)引发异常时,将引发异常。从文档中:

InvocationTargetException是一个选中的异常,它封装了被调用的方法或构造函数引发的异常


从堆栈跟踪(确切地说是“由”-部分引起的)判断,它看起来像是
testMethod
导致调用
MenuSingleplayer.LoadWorlds
,这会引发
NullPointerException
。这个
NullPointerException
一直传播到它到达反射调用,在这一点上,它被包装在一个
InvocationTargetException

中,我感觉有点。。。现在很愚蠢。谢谢,虽然你解决了!
Caused by: java.lang.NullPointerException
at MenuSingleplayer.LoadWorlds(MenuSingleplayer.java:210)