PDA

View Full Version : Java, package e visibilità


Kaldais
07-06-2006, 17:16
Sperando di avere un pò più di fortuna della precedente domanda, :asd:, vi porgo un altro quesito.

Ho una classe all'interno di un pacchetto x.y che vuole caricare con Class.forName() dinamicamente tutte le classi dentro una cartella z (esterna al .jar). Tutto questo inserito in una directory.

Il problema è quando cerco di aprire la classe con
Class.forName("z.Classe");
l'interprete mi da un class-not-found, ma come è possibile risolverlo? E' da un bel pò che ci provo ma zero idee.

kingv
07-06-2006, 18:04
metti in classpath la directory che contiene z

se hai tipo:
dir1/pippo.jar
dir2/z/A.class
dir2/z/B.class


per caricare z.A e z.B devi mettere in classpath dir2/

se non ho capito niente rispiega :O

Kaldais
07-06-2006, 18:12
Di capire hai capito alla perfezione, ti ringrazio anche per il consiglio ma .. ci avevo già provato.

Comunque, la struttura esatta è:

C:\Server\Server.jar
C:\Server\test\Test.class


All'interno di Server.jar c'è la classe server.cage.Loader, che ha appunto la funzione Class.forName("test.Test").

Il tutto poi viene fatto partire dal java -cp "C:\Server" -jar Server.jar.

kingv
07-06-2006, 19:18
dalla documentazione (in riferimento a -jar):

When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.


quindi usandola non considera il classpath che imposti con "-cp"


risolvi con:
java -cp "C:\Server;C:\Server\Server.jar" package.nomeclassecolmain

Kaldais
08-06-2006, 11:35
Ti ringrazio per l'aiuto. Comunque, ho trovato una soluzione più elegante: praticamente si tratta di usare URLClassLoader, basta dare il percorso delle class, trasformarlo in URL ed è possibile caricare qualsiasi classe in qualsiasi directory.