PDA

Visualizza la versione completa : [JAVA] Trasparenza rispetto al JAR


dekdek
09-04-2005, 13:31
Riposto il codice scritto per trovare le sottoclassi istanziabili di una certa classe astratta data come argomento.
(Non fate caso ai generics, se non li metto mi da dei warning, ma ancora non ho capito il senso di parametrizzare la classe Class...)
Vorrei modificarlo in modo che funzioni anche dall'interno di un file JAR.



public final static <T extends Object> Class[] getSubclasses(Class<T> c) {
String pacchetto = c.getPackage().getName(); // Nome pacchetto
String path = c.getResource(".").getFile(); // QUI DA ERRORE: getResource() = null!!!
System.out.println(path);
File dir = new File(path); // Trasforma in File
File[] classi = dir.listFiles(); // Leggi tutti i File nella directory
ArrayList<Class> istanziabili = new ArrayList<Class>(classi.length);
Class subclass=null;

for (File f : classi) {
String r = pacchetto + '.' + f.getName();
try {
subclass = Class.forName(r.replaceFirst(".class",""));
if ( Modifier.isAbstract(subclass.getModifiers()) )
continue;
if (c.isAssignableFrom(subclass)) // subclass e' assegnabile a c
istanziabili.add(subclass);
} catch (Throwable t) {}
}
Class[] lista = new Class[istanziabili.size()];
lista = istanziabili.toArray(lista);
return lista;
}


Mi date una mano?
L'errore e' alla terza riga... sigh... :stordita:

dekdek
09-04-2005, 17:05
Ho trovato l'inghippo...
Nei JAR non esiste "." come alias della directory attuale!!!

dekdek
09-04-2005, 17:18
String path = c.getClassLoader().getResource(pacchetto).getFile( );
File dir = new File(path); // Trasforma in File


In questo modo funziona ancora con i file "esplosi" e riesco a leggere il percorso relativo al JAR:

file:\C:\jdek\Lotto\dist\Lotto.jar!\ruote

Ma se faccio dir.listfiles() non ritorna niente. :(

Loading