Es fällt mir schwer, den Klassenpfad für ein Verzeichnis auf ein Klassenpaket zu setzen. Ich versuche, eine JAR-Datei auszuführen, die ein Verzeichnis als Befehlszeilenargument verwendet. Das Programm verwendet das Verzeichnis, um auf Klassendateien in einem Ordner zuzugreifen, und verwendet Reflektion, um die Klassenfelder und -methoden zu untersuchen.Ich kann nicht auf Verzeichnisklassen zugreifen, nachdem ich den Klassenpfad festgelegt habe
ich dann den classlist gehen, den Namen jeder Klasse erhalten, und verwenden Sie die Class.forName()
Methode die Klassen zuzugreifen.
Class c = Class.forName(className);
Damit die obige Zeile funktioniert, muss ich den Klassenpfad auf die Adresse des Verzeichnisses festlegen, das die Klassen enthält.
ich das Programm bekommen kann ganz gut laufen, wenn ich ein Verzeichnis von Klassen bin mit, die nicht wie unten zu einem Paket gehören: für die folgende Zeile ein, jedoch
ist Monopol ein Paket und das Programm wirft einen ClassNotFoundException
nach Class.forName(className)
java -cp "Explorer.jar:/Users/john/Desktop/Programming\ Project/Monopoly/build/classes/monopoly/" explorer.ExplorerDemo /Users/john/Desktop/Programming\ Project/Monopoly/build/classes/monopoly/
Für Testzwecke Aufruf habe ich versucht, Einstellung `Class.forName() aufrufen, den Paketnamen wie unten enthalten:
Class c = Class.forName("monopoly."+className);
Dies wirft jedoch auch ClassNotFoundException
.
Also in Ihrem Ansatz, würden Sie nicht einmal den Classpath setzen müssen? – Brosef
Nein. Sie legen das Programm programmatisch für den neuen ClassLoader fest. –
Ich bin mir sicher, dass Ihr Ansatz funktioniert, aber ich würde gerne herausfinden, wie dies mit dem Klassenpfad funktioniert. – Brosef