Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe ein Programm welches verschiedene Implementationen einer Schiedsrichterklasse zur Verfügung stellt. Dem User soll die Möglichkeit gegeben werden, einen Schiedsrichter seiner Wahl zu laden. Das dynamische Laden der Klassen funktioniert soweit ganz gut, sofern die Namen der Klassen bekannt sind.
Wenn ich nun eine neue Implementation von Judge.java ableite und deren Namen nicht irgendwo im Programm hinterlege bekomme ich diese nicht geladen. Ich habe es schon über die Klasse Package versucht, aber diese kennt komischerweise die in ihr enthaltenen Klassen nicht?!?!? Ich dachte ich könnte mittels getDeclaredClasses() bei Anwendung auf die Superklasse (Judge) die implementierenden Vererbungen heraus bekommen, aber diese Lösung verlief auch im Sande. Ich habe nun schon gegoogelt und das Forum hier auf den Kopf gestellt. Ich habe lediglich eine Lösung gefunden, welche den Dateipfad nach .java Dateien abgegrast. Aber dort wurde geschrieben das das "böse" ist und unsauber. Nun frag ich mich: Wie geht es denn nun richtig? Wie baut man Plugins oder sowas?
warum lädst du denn diese klasse überhaupt dynamisch, sind deine schiedsrichterklassen denn soooo riesig :shock: , dass die alle auf einmal nicht in den speicher passen? warum nicht einfach alle ganz stinknormal laden und dann einen auswählen? ???:L
Ein Package kann gar nicht wissen welche Klassen darin definiert sind. Es gibt auch ganz andere Anwendungsfälle als lokale Klassen. Versteh ein Package als Namespace. Woher soll ein Namespace wissen was so alles irgendwo auf der Welt in ihm definiert wurde?
Um deine Frage zu beantworten:
Überlicherweise gibt es das PlugIn Framework vor,
In letzter Zeit sind PlugIns anscheinend 'hip' geworden und jeder möchte sowas in seine eigene Mini Applikation einbauen :?
EDIT:
Falls du ernsthaft an einer sinnvollen 'PlugIn'/Bundle Architektur interessiert bist, dann sei dir ein OSGi Framework wie Equinox oder ein komplettes PlugIn Framework wie Eclipse (Eclipse läuft übrigens seinerseits in Equinox) ans Herz gelegt.
warum lädst du denn diese klasse überhaupt dynamisch, sind deine schiedsrichterklassen denn soooo riesig :shock: , dass die alle auf einmal nicht in den speicher passen? warum nicht einfach alle ganz stinknormal laden und dann einen auswählen? ???:L
Riesig sind sie eigentlich ganz und gar nicht. Die Sache ist nur die, das hier weitere Implementationen zu erwarten sind, die ich bisher nicht kenne. Ich würde aber ganz gerne den Code nicht jedes mal anfassen müssen. Quasi soll er etwas intelligenz mit bekommen und selber schauen: "Was haben wir denn für Klassen als Vererbung von Judge im Package XY?"
Ja das macht wohl auch eher Sinn, als sich vom Begriff "Package" leiten zu lassen. Ich habe nur immer Gedacht, wenn man das Package als Objekt sieht, müsste es doch auch wissen was in ihm drin ist. Aber falsch gedacht! :bloed:
Wildcard hat gesagt.:
[...]Falls du ernsthaft an einer sinnvollen 'PlugIn'/Bundle Architektur interessiert bist, dann sei dir ein OSGi Framework wie Equinox oder ein komplettes PlugIn Framework wie Eclipse (Eclipse läuft übrigens seinerseits in Equinox) ans Herz gelegt.