Reflexión(Reflection) - Error clase no encontrada
Publicado por Dani (6 intervenciones) el 08/03/2009 13:45:44
Muy buenas,
Estoy trabajando en un problema que me requiere crear unos archivos en tiempo de ejecución, compilarlos e instanciarlos. Para ello uso Reflection. (-enlace en Inglés- http://java.sun.com/developer/technicalArticles/ALT/Reflection/index.html)
Es decir, ejecuto un programa principal, durante el cual:
1.- Creo 3 ficheros: botTest0.java, botTest1.java ,botTest2.java (con código correcto)
2.- Se compilan en tiempo de ejecución (com.sun.tools.javac.Main.compile)
3.- A partir de los .class generados se pueden crear objetos ( mediante newInstance() gracias a Reflexión )
4.- Por último se eliminan los .java y .class de los puntos anteriores, para volver al punto 1
El código para la reflexión, el punto 3, es éste:
for (i=0;i<3;i++){
System.out.println("Iteración "+i);
//Hacemos el reflect de las clase testbot
try {
Class c = Class.forName("botTest"+i);
bot = (Agent)(c.newInstance());
} catch (Exception e) {
System.out.println("error cargando la clase "+e);
}
//fin the reflect
}
El problema es que da un error de "java.lang.ClassNotFoundException: botTest0" cuando intenta la línea "Class c = Class.forName("botTest"+i);"
La verdad es que he intentado muchísimas cosas, hasta intentar cambiar el classpath dinámicamente...
Sólo funciona si, al ejecutar el proyecto, los .java y .class de los archivos botTest que quiero probar, ya están en su carpeta correspondiente, pero, por contra, si empiezo la ejecución con esas carpetas vacias, rellenandolas en tiempo de ejecución (como necesito), me salta con el error de clase no encontrada. Esto puede parecer lógico, pero yo suponía que mediante Reflexión esto no debía suceder.
Motivos por los que sucede un error de clase no encontrada (según - enlace en Inglés- http://mindprod.com/jgloss/compileerrormessages.html#CLASSNOTFOUND )
1* You are using Internet Explorer which has a defective or missing Java.
2* Some other syntax error ahead of the class declaration is preventing the compiler from seeing the class declaration.
3* The class is not in the proper file in the proper directory.
4* The class is not public.
5* The class does not have the correct case, either in the class name or the file name.
6* The corresponding class or java file is not on the CLASSPATH (considering the package name.)
Yo juraría que cumplo todos los pasos (aquellos que van con lo mio claro, nada de Internet Explorer), pero es evidentemente que no :-D
¿alguna idea? ¿pista?
Muchísimas gracias.
Dani.
Estoy trabajando en un problema que me requiere crear unos archivos en tiempo de ejecución, compilarlos e instanciarlos. Para ello uso Reflection. (-enlace en Inglés- http://java.sun.com/developer/technicalArticles/ALT/Reflection/index.html)
Es decir, ejecuto un programa principal, durante el cual:
1.- Creo 3 ficheros: botTest0.java, botTest1.java ,botTest2.java (con código correcto)
2.- Se compilan en tiempo de ejecución (com.sun.tools.javac.Main.compile)
3.- A partir de los .class generados se pueden crear objetos ( mediante newInstance() gracias a Reflexión )
4.- Por último se eliminan los .java y .class de los puntos anteriores, para volver al punto 1
El código para la reflexión, el punto 3, es éste:
for (i=0;i<3;i++){
System.out.println("Iteración "+i);
//Hacemos el reflect de las clase testbot
try {
Class c = Class.forName("botTest"+i);
bot = (Agent)(c.newInstance());
} catch (Exception e) {
System.out.println("error cargando la clase "+e);
}
//fin the reflect
}
El problema es que da un error de "java.lang.ClassNotFoundException: botTest0" cuando intenta la línea "Class c = Class.forName("botTest"+i);"
La verdad es que he intentado muchísimas cosas, hasta intentar cambiar el classpath dinámicamente...
Sólo funciona si, al ejecutar el proyecto, los .java y .class de los archivos botTest que quiero probar, ya están en su carpeta correspondiente, pero, por contra, si empiezo la ejecución con esas carpetas vacias, rellenandolas en tiempo de ejecución (como necesito), me salta con el error de clase no encontrada. Esto puede parecer lógico, pero yo suponía que mediante Reflexión esto no debía suceder.
Motivos por los que sucede un error de clase no encontrada (según - enlace en Inglés- http://mindprod.com/jgloss/compileerrormessages.html#CLASSNOTFOUND )
1* You are using Internet Explorer which has a defective or missing Java.
2* Some other syntax error ahead of the class declaration is preventing the compiler from seeing the class declaration.
3* The class is not in the proper file in the proper directory.
4* The class is not public.
5* The class does not have the correct case, either in the class name or the file name.
6* The corresponding class or java file is not on the CLASSPATH (considering the package name.)
Yo juraría que cumplo todos los pasos (aquellos que van con lo mio claro, nada de Internet Explorer), pero es evidentemente que no :-D
¿alguna idea? ¿pista?
Muchísimas gracias.
Dani.
Valora esta pregunta


0