Portal > Foren > Java > Allgemeine Java-Programmierung > Klasse laden per Dateiname (!=Klassenname)
Antwort
 
Themen-Optionen
Alt 28.02.2006, 16:34 Nach oben    #1
Benutzer
 
Registriert seit: 05.12.2005
Beiträge: 62
Standard Klasse laden per Dateiname (!=Klassenname)

Hallo zusammen,

ich habe bisher erfolgreich per Class.forName(String className) eine Klasse laden können. Allerdings ist der Klassenname ja etwas anderes als der Pfad zur entsprechenden class-Datei, da der Klassenname ja aus der Pakethierarchie kommt also z. B. pa.ket.hier.archie.Klasse. Da ich nun nicht davon ausgehen kann, dass der Klassenpfad (in der Pakethierarchie) dem relativen Pfad (im Dateisystem) entspricht, suche ich eine Möglichkeit, eine Klasse zu laden, indem ich quasi den Pfad zur class-Datei angebe, ungeachtet dessen, in welchem Paket sich diese Klasse vielleicht befindet.

Kennt da jemand eine Möglichkeit? in der API der Klasse Class ist IMO ja auch nur die Möglichkeit per Klassenname, nicht aber per Dateiname gegeben. Und googlen nach Stichworten "java class filename" ist net besonders hilfreich...

Thx in advance
sayang
Sayang ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.02.2006, 16:42 Nach oben    #2
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.108
Standard

Du musst Class.forName() mit dem "fully qualified classname" füttern. Bsp.:

java Code:
  1. package com.pagosoft.demo;
  2. public class Demo {
  3.     public static void main(String[] args) {
  4.         Class demo = Class.forName("com.pagosoft.demo.Demo");
  5.     }
  6. }
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.02.2006, 18:44 Nach oben    #3
Benutzer
 
Registriert seit: 05.12.2005
Beiträge: 62
Standard

Hmmm,
offensichtlich hab ich mich falsch/schlecht ausgedrückt. Das Laden der Klasse mit Class.forName hab ich bereits hinbekommen, ist ja auch kein Ding.
Was ich erreichen will:
Ich schreibe ein Programm, bei dem man zur Laufzeit einen bestimmten Algorithmus (dessen Klasse dann mit forName geladen wird) festlegen kann, der zur Berechnung der Daten verwendet werden soll. Nun habe ich ein paar solcher Algorithmen im System drin, diese implementieren alle eine bestimmte Schnittstelle, und das funktioniert auch alles wunderbar. Ich möchte nun aber so eine Art plugin-Möglichkeit geben. Dazu gibt es im Projektordner ein weiteres Verzeichnis namens "plugins". Es soll der Third party möglich sein, weitere Class-Files bzw. Klassen, die die oben erwähnte Schnittstelle implementieren, in dieses plugins-Verzeichnis zu speichern und mein Programm handelt das automatisch. Allerdings wird mein Programm dann evtl. in Form einer Jar-Datei vorliegen. Wie bekomme ich es nun genau hin, dass mein Programm auch in diesem Ordner nach Klassen sucht und diese auch lädt. Ist ja möglich, dass diese Plugin-Klassen Teil eines anderen Packages sind, oder irre ich mich da?

Ich hoffe ich hab nun etwas besser erklärt, worum es mir geht. Vielen Dank für eure Tipps...

sayang
Sayang ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.02.2006, 18:58 Nach oben    #4
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 575
Standard

Also was du eigentlich möchtest:
Dateien dynamisch in den Classpath aufnehmen.
Am besten steckst du die Plugins in eine Jar-Datei.

Hier kannst du nachlesen wie du zum Beispiel Datenbanktreiber nachträglich in den Classpath einbaust.


Daraus resultierend sollte das funktionieren:

Java Code:
  1. URL u = new URL("jar:file:/path/to/anplugin.jar!/");
  2. String classname = "an.packate.Class";
  3. URLClassLoader ucl = new URLClassLoader(new URL[] { u });
  4. BekannteKlasse bk = (BekannteKlasse)Class.forName(classname, true, ucl).newInstance();
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.02.2006, 21:10 Nach oben    #5
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.108
Standard

Sorry, hab dich falsch verstanden... beim zweiten mal lesen ist mir das dann auch aufgefallen.

Wenn du den ganzen Kram nicht selbst schreiben möchtest und etwas größeres für die Plugins brauchst, würde ich dir die "Platonos Pluginengine" empfehlen... frag mich aber bitte nicht, wo du die herbekommst... ich weiß, dass ich den Link in meinen Favoriten hatte, aber ich find ihn nicht mehr... Sourceforge müsste es gewesen sein.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.03.2006, 11:35 Nach oben    #6
Benutzer
 
Registriert seit: 05.12.2005
Beiträge: 62
Standard

Hi,

vielen Dank für die Tipps pago & sparrow. Habe mich für den URLClassLoader entschieden, da das mit den Plugins jetzt nicht so gewaltig wird, dass ich dafür ne extra PluginEngine bräuchte.
Das mit dem URLClassLoader hat aber auch wunderbar funktioniert. Nur hab ichs auf ein Verzeichnis angewendet, in dem class-Dateien drin sind, nicht direkt auf ein jar, aber das könnte man ja zusätzlich auch noch einbauen...

Vielen Dank nochmal
sayang
Sayang ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Classen dynamisch laden dtdesign PHP-Programmierung 6 10.07.2006 17:21
Klasse laden Xean Allgemeine Java-Programmierung 13 01.07.2006 15:48
Klasse aus Jar laden Xean Allgemeine Java-Programmierung 1 13.06.2006 16:04
Wert Varible in Listener anderer Klasse nutzen??? risa Desktop-Applikationen und Grafik 1 03.04.2006 07:36
[PHP] Wie übergebe ich Daten per URL? Ben Tutorials 0 05.12.2004 14:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:46 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44