Externe Java-Klassen laden

Kai008

Erfahrenes Mitglied
Ich habe ein Programm, welches beim eintippen von Strings ein damit "verlinktes" Programm startet. Quasi eine Shell, um Verknüpfungen zu spaaren. Irgendwann vor kurzen oder langen habe ich es mit einen Terminplaner erweitert. Allerdings gefällt mir nicht, wie es so aufgebaut ist. Irgendwie sehr schwer, dass sich die "Shell" und der Planer im selben Projekt befinden. Deshab kam ich anfangs auf die Idee, es als externes Programm zu nutzen, und die Shell per Sockets abfragen zu lassen, ob ein Termin existiert, oder ihm den Visible-Befehl zu senden.
Eigendlich wäre das wohl kein Problem (zwar nicht getestet, aber gibt sicher einen Weg das Verzeichniss der JRE herauszufinden, um so per "javac -jar app.jar" zu starten), aber ich würde es gerne direkt in die Jar des Programmes reinpacken. Und wie es dann geht weiß ich nicht. Ich kenne zwar Class.forName("");, aber weiter kam ich noch nicht. Hab auch in mein Lieblingsbuch geschaut und Tante Google befragt, aber bei ersteren wird es zwar erwähnt aber nicht darauf eingegangen, anderes hat mir nicht wirklich das was ich brauche geliefert.

Hat da vielleicht jemand etwas?
 
Was willst du genau machen? Eine Instanz einer externen Java-Klasse erstellen, oder eine Java-Datei während der Laufzeit kompilieren und anschließend eine Instanz erstellen?
 
Danke, gutes Stichwort.
Nur kann man ne geladene Class dann zu einer bestimmten Klasse casten? Also damit man auch die Methoden verwenden kann?
Es gibt zwar die Methode cast, aber die gibt mir irgendwie wieder eine Klasse zurück.
 
Ein Class-Objekt beschreibt nur die Klasse. Eine Instanz bekommst du mit newInstance bei einem parameterlosen Konstruktor oder über einen Constructor wenn du Parameter übergeben musst.
 
Danke, die Methode hatte ich schon endeckt. Aber ich würde es gerne als Variable abspeichern, um Methoden zu verwenden. Zwar gingen Sockets jetzt auch, aber wenn dann sind mir Methoden lieber.
 
Mit newInstance bekommst du doch eine Instanz der Klasse? Gibts das selbe zurück wie "new Klasse()".
Diese Instanz ist doch eine "Variable" und du kannst (jede) Methode daraus aufrufen.
 
Ups, ich bin ein Depp. x)
Zwar gibt er mir laut Eclipse ein "capture#1-of ?" zurück, aber DA kann man Casten. Danke euch beiden.
 
Vielleicht hilft dir das:
Java:
final Class<?> forName = Class.forName(className);

if (ReflectionInterface.class.isAssignableFrom(forName)) {
   final Class<? extends ReflectionInterface> interfaceClass = forName.asSubclass(ReflectionInterface.class);
   final ReflectionInterface newInstance = interfaceClass.newInstance();
}
else{
  //Fehlerbehandlung
}

Dann bekommst du auch kein capture of ? sondern direkt deinen Instanz ohne zu casten.
 

Neue Beiträge

Zurück