Klasse relativ zur jar dynamisch laden

DerKellerautomat

Grünschnabel
Hi Jungs!

Ich programmiere gerade (zwangsweise) ein Spiel, dass am Ende als ausführbare jar laufen soll.
Das für mich komplizierte ist, dass die KIs (die alle das gleiche Interface implementieren) austauschbar sein sollen.
Das heißt es gibt im gleichen Verzeichniss, indem die jar auch ist noch einen Ordner KI, in dem dann einfach die class Datein reingeschoben werden sollen und dann soll das ganze anhand des Namens / Systempfads gefunden werden.

Ich habe es so versucht, aber das geht nicht:

Code:
Class<?>formClass = Class.forName("KI/TestAI_2");

Constructor<?> con = formClass.getConstructor();

strategy = (BStrategy) con.newInstance();

Eine wunderschöne ClassNotFoundException bekomme ich dann.



Ich hab auch schon viel gegooglet und auch hier im Forum geschaut. Habe zwar viele ähnliche Themen gefunden, aber auf mein Beispiel konnte ich das nicht so recht anweden.

Es wäre wahnsinnig toll wenn mir da jemand helfen kann!
Ich werde langsam Wahnsinnig ;)
 
Wenn sich der Ordner KI im Classpath befindet sollte ein normales classForName mit dem fully qualified class name (also inklusive package) genügen.
 
Ok, dummer denkfehler von mir :D

Also das hatte ich schon getestet.

Das Problem ist nur: Es geht, aber NUR dann wenn ich die KI in dem gleichen Project geschrieben wird!

Wenn ich die class dann in ein anderes Project kopiere (in einen in den buildpath als class Folder eingetragenen Ordner) dann kann ich mich auf dem Kopf stellen und es geht nicht...

Mal hier einmal der Code:

Code:
public static BStrategy loadStrategyFromFile(String path) {

		BStrategy strategy = null;

		try {
			Class formClass = Class.forName(path);

			System.out.println("Hier:1 " + formClass);

			Constructor con = formClass.getConstructor();

			strategy = (BStrategy) con.newInstance();

		} catch (Exception e) {
			System.out.println("Exception: " + e.getMessage());
		}

		return strategy;

	}
	
	
	
	
	public static void main(String[] args){   
		
		String path = "KI/de.fhhannover.inform.blokus7.test.TestAI_2";
		
		BStrategy strategy = loadStrategyFromFile(path);

		System.out.println("Erfolg, Gruppenname ist :"+strategy.getGroupName());

	}



Gibt es ne möglichkeit um den voll quallifizierten Pfad einer Klasse zur Laufzeit rauszufinden, oder muss man denn vorher kennen.
Also mir wäre es ja lieb, wenn das ganze einfach mir drag & drop gehen würde.

KI Class rein - läuf !:D
 
Zurück