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

标签 java jar javafx

我有一个简单的 Start 类,其中包含 public Start(String[] params) 构造函数,我从其他级别的不可运行的 JAR 文件调用该类运行Java程序。一切都在运行时环境中运行。当我尝试调用 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 正在毫无问题地调用,当它的构造函数中没有参数时。

最佳答案

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

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

Demo.

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

关于Java.lang.Class.newInstance() 抛出 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975930/

相关文章:

java - 有什么方法可以在 JavaFX 中构建路径渐变?

Java 结束语

java - 如何从Netbeans项目中的jar中排除源包

java - 在 Eclipse 上安装 Java 3D

Java代码安全

javafx - 如何清除 DatePicker

Java Scanner useDelimiter 意外结果

java - 使用 AJAX 调用输出存储为 BLOB 的 PDF 文件内容而不创建文件

java - 为文本框创建气球工具提示?

java - 如何编写当用户单击 X 按钮退出程序时出现的弹出对话框的代码?