giuseppe83
19-01-2006, 21:41
Ho la necessità di caricare dinamicamente una classe, impostando dinamicamente anche le dipendenze di questa classe anche da eventuali file jar. Ho tentato un approccio del tipo mostrato nell'esempio seguente che però genera una eccezzione
public class prova {
public prova()throws Exception{
URLClassLoader cl;
File f1=new File("C:/IRApplication/lib/jdeal/jdeal.jar");
File f2=new File("C:/IRApplication/IR");
File f10=new File("C:/IRApplication/extensions/algorithms/DCGA");
URL url1=f1.toURL();
URL url2=f2.toURL();
URL url10=f10.toURL();
URL[] u=new URL[] {url2,url1,url10};
//vreo un classloader per leggere la mia classe
cl = new URLClassLoader(u,this.getClass().getClassLoader());
//cerco di caricare la classe
Class c=Class.forName("it.unisannio.rcost.cise.dcga.IRDeterministicCrowding",true,cl);
System.out.println("OK");
}
Il codice dicevo genera un'eccezione dovuta all'impossibilità di risolvere correttamente una dipendenza tra la classe ed una classe contenuta nel jar
Exception in thread "main" java.lang.NoClassDefFoundError: pt/laseeb/jdeal/ChromosomeEvaluator
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at prova.<init>(prova.java:21)
at prova.main(prova.java:28)
qualcuno ha idea del perchè possa succedere questo????
public class prova {
public prova()throws Exception{
URLClassLoader cl;
File f1=new File("C:/IRApplication/lib/jdeal/jdeal.jar");
File f2=new File("C:/IRApplication/IR");
File f10=new File("C:/IRApplication/extensions/algorithms/DCGA");
URL url1=f1.toURL();
URL url2=f2.toURL();
URL url10=f10.toURL();
URL[] u=new URL[] {url2,url1,url10};
//vreo un classloader per leggere la mia classe
cl = new URLClassLoader(u,this.getClass().getClassLoader());
//cerco di caricare la classe
Class c=Class.forName("it.unisannio.rcost.cise.dcga.IRDeterministicCrowding",true,cl);
System.out.println("OK");
}
Il codice dicevo genera un'eccezione dovuta all'impossibilità di risolvere correttamente una dipendenza tra la classe ed una classe contenuta nel jar
Exception in thread "main" java.lang.NoClassDefFoundError: pt/laseeb/jdeal/ChromosomeEvaluator
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at prova.<init>(prova.java:21)
at prova.main(prova.java:28)
qualcuno ha idea del perchè possa succedere questo????