con reflexiones .....

Rosalia
08 de Enero del 2004
Hola!!
He usadoel package java.lang.reflect y a la clase Class para poder llamar a métodos de una clase Login, pero no me funciona con el main, me manda un error [ login.main()], con otros métodos si me funcionan, y cómo podría mandar llamar al constructor es igual que con cualquier método?

alguien me podría ayudar, se lo agradeceré de antemano.


mi código es:

static public void prueba(String cname, String mname) throws Exception {
Class c=Class.forName(cname);

Class[] str={};
//no use c.getConstructor(str), porque me marca error en constructores que tengan parámetros.
Constructor constr[]=c.getConstructors();
System.out.println(constr[0]);

Object[] param={};
Object stringc=constr[0].newInstance(param);

Method meth = c.getMethod(mname,null);

Object[] args={};
Object resultado=meth.invoke(stringc,args);
}


desde el main llamo a éste con:
try {
prueba("Login","main"); //llamo al principal
// prueba("agag0001"); //constructor tiene paso de parametros
} catch(Exception e) {
System.out.println("Error ");
System.out.println(e.getMessage());
System.exit(0);
}


mi main de la clase Login es:

Public static void main(String args[]) {
new Login().show();
}

Heihachi
08 de Enero del 2004
Hola!

No te funciona porque aqui

Method meth = c.getMethod(mname,null);

estás buscando un método que se lame "main" y que no tenga parámetros. Como no existe te da error.

Para buscar el método main(String[] args) va así:

Class[] cla=new Class[]{String[].class};
Method meth = c.getMethod("main",cla);

El problema que tienes con los constructores es el mismo. Intentas ejecutar un constructor sin pasarle los parámetros correctos.

En el otro post llamaba a un constructor con un parámetro.
Puedes mirar ahi para ver como se hace

He modificado el código para que puedas llamar al main, pero ahora el método prueba sólo funcionará con funciones que tengan como parámetros un String[]

Saludos!

public static void main(String[] args) {
kk kk = new kk();
try {
prueba("Login","main"); //llamo al principal
// prueba("agag0001"); //constructor tiene paso de parametros
} catch(Exception e) {
System.out.println("Error ");
System.out.println(e.getMessage());
e.printStackTrace();
System.exit(0);
}
}

static public void prueba(String cname, String mname) throws Exception {
Class c=Class.forName(cname);

//Para llamar al método main no necesitamos buscar constructores ya que es estático
/*Class[] str={};
//no use c.getConstructor(str), porque me marca error en constructores que tengan parámetros.
Constructor constr[]=c.getConstructors();
System.out.println(constr[0]);*/

/*Object[] param={};
Object stringc=constr[0].newInstance(param);*/

//Buscamos el método main con parámetros del tipo String[]
Class[] cla=new Class[]{String[].class};
Method meth = c.getMethod(mname,cla);
//Ejecutamos el main con una lista vacía de parámetros
Object[] args={new String[]{}};
Object resultado=meth.invoke(null,args);
}