| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  27-12-2005, 15:04 | #1 | 
| Member Iscritto dal: Oct 2002 Città: Avellino 
					Messaggi: 172
				 | 
				
				[JAVA] Loadig dinamico classi
			 
		Innanzi tutto il mio obiettivo: caricare dinamicamente dei factory, contenuti in una cartella, da utilizzare poi per istanziare i vari componenti di un "plugin". Il problema è che questi factory oltre alle classi Java standard potrebbero necessitare di altre classi contenuti in altri jar, che però non posso aggiungere staticamente al classpath dato che a priori non conosco i plugin che sono presenti e le loro dipendenze. Avevo allora pensato ad un codice del genere File f1=new File("C:/IRApplication/lib/jdeal/jdeal.jar"); File f2=new File("C:/IRApplication/extensions/algorithms/DCGA"); URL url1=f1.toURL(); URL url2=f2.toURL(); URLClassLoader cl = new URLClassLoader(new URL[] {url1,url2},ClassLoader.getSystemClassLoader()); Class c = cl.loadClass("it.unisannio.rcost.cise.dcga.factory.IRDCPlugin"); IRAlgorithmPlugin p = (IRAlgorithmPlugin) c.newInstance(); //fin qui tutto bene //l'invocazione del seuguente metodo della classe caricata //tramite reflection genera un'eccezione IRAlgorithm alg=(IRAlgorithm) p.getAlgorithm(); L'eccezione generata è la seguente 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 it.unisannio.rcost.cise.dcga.factory.IRDCPlugin.getAlgorithm(IRDCPlugin.java:48) at prova.main(prova.java:24) La classe non trovata, ossia pt/laseeb/jdeal/ChromosomeEvaluator, fa parte del jar che ho specificato al classloader(jdeal.jar). Il metodo che genera l'eccezione semplicemente dovrebbe istanziare una classe che a sua volta fa uso e importa classi contenute nel file jar menzionato Qualcuno sa spiegarmi il motivo di questa eccezione?? O consigliarmi un altro metodo per implementare un meccanismo di plug-in con caricamento dinamico delle classi e dei jar da cui dipendono? 
				__________________ "Riempi loro i crani di dati non combustibili,imbottiscili di "fatti" al punto che non si possono più muovere tanto son pieni, ma sicuri d'essere "veramente bene informati". Dopo di che avranno la certezza di pensare, quando in realtà sono fermi come un macigno..." FAHRENHEIT 451 | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 08:09.









 
		 
		 
		 
		





 
  
 



 
                        
                        










