Carregando um jar dinamicamente e instanciação de objetos

oi, estou com um dificuldade para passar um array como parâmetro para o jar que esta sendo carregado dinamicamente.Tento arrumar mas sempre acabo caindo nos erros de

  • java.lang.IllegalArgumentException: argument type mismatch
  • java.lang.IllegalArgumentException: wrong number of arguments

classe que carrega o objeto e invoca o .jar:


public class ClassLoad {

public static void main(String[] args) throws InvocationTargetException {

    String filePath;
    filePath = new String("C:\\Users\\lucas.oliveira\\Desktop\\HelloWorld.jar");

    URL myJarFile = null;
    try {
        myJarFile = new URL("file:///"+filePath);
    } catch (MalformedURLException e1) {
        System.out.println("1");
        e1.printStackTrace();
    }

    URLClassLoader cl = URLClassLoader.newInstance(new URL[]{myJarFile});

    Class Jarred = null;
    try {
        Jarred = cl.loadClass("helloworld.HelloWorld");
    } catch (ClassNotFoundException e) {
        System.out.println("2");
        e.printStackTrace();
    }

    Method simpleWrite = null;
    try {
        simpleWrite = Jarred.getMethod("main", new Class[] {String[].class});
    } catch (SecurityException e) {
        System.out.println("3");
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        System.out.println("4");
        System.out.println(e.getMessage());
        //e.printStackTrace();
    }

    Object JarredObj = null;
    try {
        JarredObj = Jarred.newInstance();
    } catch (InstantiationException e) {
        System.out.println("5");
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        System.out.println("6");
        e.printStackTrace();
    }

    String[] nome = new String[2];
    nome[0] = "Lucas";
    nome[1] = "Oliveira";
    
    try {
        Object response = simpleWrite.invoke(JarredObj, "lucas", "");
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}
}

.jar que é invocado:

public void main(String[] args) 
{
    args = new String[2];
    
    JOptionPane.showConfirmDialog(null, "Ola: " + args[0] + ":" + args[1]); 
}

:neutral_face:

Tente:

Object response = simpleWrite.invoke(JarredObj, nome);

O método main da classe HelloWorld só possui um único parâmetro, que é do tipo String[].

Mas você está invocando ele passando dois parâmetros do tipo String:

// 2 parametros String
Object response = simpleWrite.invoke( JarredObj, "lucas", "" );

O correto seria assim:

// 1 parâmetro String[]
Object response = simpleWrite.invoke( JarredObj, new String[] {"lucas", ""} );
1 curtida

mas simpleWrite = Jarred.getMethod("main", new Class[]{String.class});

não esta querendo aceitar um array ._.

Edit: eu dei uma mexida e conseguir fazer com que ele aceitasse, porem agora o object Response não vai.Eu mexo em um lugar e bagunço outro kkkk

Atualização: eu consegui :grin: mas tive que converter o array q eu passei em Object ._.