Java.lang.Class.newInstance()抛出IllegalArgumentException

时间:2014-07-26 22:03:30

标签: java jar javafx

我有一个带有Start构造函数的简单public Start(String[] params)类,我从其他正在运行的Java程序级别的不可运行的JAR文件中调用它。一切都在运行时环境中工作。当我尝试调用newInstance()方法时,会出现问题,以便调用此Start类。

班级Start如下所示:

public class Start {

    public Start(String[] params) {

        /* initialize MainStage object */
        MainStage stage = new MainStage(params);
        stage.show();
        // MainStage DO NOT have any restriction about params.length
    }
}

这就是我调用Start类的方式:

String[] t = new String[] {"One", "Two", "Three"};

try {
    Class<?> clazz = Class.forName("org.plugin.Start");
    /* line below throws the mentioned exception */
    clazz.getDeclaredConstructor(String[].class).newInstance((Object[]) t);
} catch (Exception e) {
    e.printStackTrace();
}

值得一提的是,除了IllegalArgumentException之外的所有内容都是完美的,这意味着 - JAR被添加到运行时类路径中,类Start在没有参数的情况下调用没有问题它的构造函数。

1 个答案:

答案 0 :(得分:2)

您需要创建一个对象数组,并将t放入其中,如下所示:

clazz.getDeclaredConstructor(String[].class).newInstance(new Object[]{t});

Demo.

Java告诉您传递了无效数量的参数的原因是您的代码将t(一个包含三个元素的数组)传递给采用单个数组参数的构造函数。换句话说,您缺少额外的间接级别,因为传递给方法或构造函数的参数需要包含在Object[]中,每个函数参数都有一个元素。