ClassLoader funktioniert nicht

Status
Nicht offen für weitere Antworten.
I

idong

Gast
Hallo, liebe Leute.

Aller Anfang ist schwer und ich bleibe leider viel zu oft hängen... diesmal an einer simplen Aufgabe, und zwar dem dynamischen Laden einer Klasse zur Laufzeit. Um mein Projekt modular zu halten, möchte ich zur Laufzeit bestimmte Module mit dem ClassLoader einbinden. Leider laufen alle Versuche ins Leere, obwohl das zunächst sehr einfach erscheint.

Folgender Code scheitert:


Code:
Modulable mod1 = new com.hector.ProjectModule();
System.out.println("getVersionMinor = "+mod1.getVersionMinor());

Modulable mod2 = (Modulable)ClassLoader.getSystemClassLoader().loadClass("com.hector.ProjectModule").newInstance();
System.out.println("getVersionMinor = "+mod2.getVersionMinor());

Und zwar klappen zwar die Zeilen 1-2 wunderbar, die entsprechende "getVersionMinor"-Methode wird aufgerufen und spuckt ein Ergebnis aus, bei dem Versuch die selbe Klasse über den ClassLoader zu laden (Zeile 4) erhalte ich jedoch eine ClassNotFoundException. Was mache ich falsch?

Bin für jede Anregung dankbar!
Beste Grüsse, Ingo
 

Wildcard

Top Contributor
das .class muss soweit ich weiß dazu.
So gehts einfacher:
Code:
Modulable mod2 = (Modulable)Class.forName("com.hector.ProjectModule.class").newInstance()
 

meez

Top Contributor
Wildcard hat gesagt.:
das .class muss soweit ich weiß dazu.
Code:
Modulable mod2 = (Modulable)Class.forName("com.hector.ProjectModule").newInstance()

das .class muss soweit ich weiß nicht dazu
 
I

idong

Gast
Hm, habe es ausprobiert, aber es funktioniert auch mit ".class" nicht. Weitere Ideen?

Ich dachte ja, dass ich vielleicht das "Modulable"-Interface auch extra laden muss aber da die Zeilen 1-2 funktionieren brauche ich das vermutlich nicht, oder?
 

meez

Top Contributor
idong hat gesagt.:
Hm, habe es ausprobiert, aber es funktioniert auch mit ".class" nicht. Weitere Ideen?

Ich dachte ja, dass ich vielleicht das "Modulable"-Interface auch extra laden muss aber da die Zeilen 1-2 funktionieren brauche ich das vermutlich nicht, oder?


Ich nehme an, dass du eine ClassCastException bkommst...Das liegt daran, dass du eine Class nicht in ein Interface Casten kannst da sie ja definitiv nicht der gleiche Typ sind....Das was du da willst ist nicht möglich...Du kannst nur die Klasse laden und danach die Zuweisung:

Code:
ProjectModule m= (ProjectModule)Class.forName("com.hector.ProjectModule").newInstance();
Module mod2 = m;


btw.:
Wildcard hat gesagt.:
hmm, hab's gerade versucht. Hast recht :wink:
:bae:
 

Wildcard

Top Contributor
meez hat gesagt.:
Ich nehme an, dass du eine ClassCastException bkommst...Das liegt daran, dass du eine Class nicht in ein Interface Casten kannst da sie ja definitiv nicht der gleiche Typ sind....Das was du da willst ist nicht möglich...Du kannst nur die Klasse laden
diesmal liegst du falsch. Wenn die Klasse das Interface inplementiert funktioniert das auch :bae:
 
I

idong

Gast
Hallo meez,

Ich nehme an, dass du eine ClassCastException bkommst...Das liegt daran, dass du eine Class nicht in ein Interface Casten kannst da sie ja definitiv nicht der gleiche Typ sind....Das was du da willst ist nicht möglich...Du kannst nur die Klasse laden:

Nein, ich bekomme eine ClassNotFoundException. Zum casten komme ich also noch gar nicht.

Ein Gedanke: Wenn ich die Klasse dynamisch lade, woher weiss der ClassLoader eigentlich, woher er das entsprechende Interface herbekommt?

Danke und Grüsse, Ingo
 

Wildcard

Top Contributor
idong hat gesagt.:
Nein, ich bekomme eine ClassNotFoundException. Zum casten komme ich also noch gar nicht.
Da muss der Pfad falsch sein.
idong hat gesagt.:
Ein Gedanke: Wenn ich die Klasse dynamisch lade, woher weiss der ClassLoader eigentlich, woher er das entsprechende Interface herbekommt?
Versteh die Frage nicht ???:L
Das importierst du doch?
 
G

Guest

Gast
Hi Wildcard,

Wildcard hat gesagt.:
Da muss der Pfad falsch sein.

Kann ja nicht, schliesslich erzeuge ich doch 3 Zeilen darüber dieselbe Klasse mit dem selben Pfad:
Code:
Modulable mod1 = new com.hector.ProjectModule();

Wenn der Pfad falsch wäre, müsste doch auch diese Anweisung scheitern, oder?

Wildcard hat gesagt.:
Versteh die Frage nicht ???:L
Das importierst du doch?

Ja, Du hast Recht, das kann es nicht sein. Über den von mir geposteten Code-Zeilen muss man sich den Import des Interfaces dazu denken :)
 

Wildcard

Top Contributor
Also das hier funktioniert bei mir:
Code:
        Object o=null;
        try
        {
           o= Class.forName("Test.TestC1").newInstance();
        } catch (InstantiationException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(o);
Benutzt du eclipse?
Ist die Klasse in der du das versuchts vieleicht im default-package?
 
I

idong

Gast
Hallo Wildcard,

Wildcard hat gesagt.:
Also das hier funktioniert bei mir:
schnipp
Benutzt du eclipse?
Ist die Klasse in der du das versuchts vieleicht im default-package?

Hm, bisher hatte ich ja immer mit der loadClass-Methode des Systemloaders gearbeitet. Wenn ich die API hier richtig deute:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html#loadClass(java.lang.String,%20boolean)

dann ruft die loadClass-Methode als dritten Schritt die Methode findClass auf:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html#findClass(java.lang.String)

wo mir dann dieser Satz ins Auge fiel:

The default implementation throws a ClassNotFoundException.

Wenn ich den Systemloader nutze, vermute ich mal, dass dieser mit der "default implementation" gleichzusetzen ist!? Wäre ja dann verständlich, dass ich - egal was ich mache - immer eine ClassNotFoundException erhalte. Ist das soweit logisch?

Also nehme ich jetzt mal an, dass ich den SystemLoader ("ClassLoader cl = ClassLoader.getSystemClassLoader();") gar nicht verwenden kann, weil dieser die Methode findClass gar nicht implementiert hat.

Nachdem ich meinen Code folgendermaßen geändert habe, funktioniert es jetzt:

Code:
System.out.println(((Modulable)Class.forName("com.hector.ProjectModule").newInstance()).getVersionMinor());

Verstehe ich das nun richtig: Das funktioniert, weil in meinem Eclipse schon die entsprechende Klasse compiliert wird (und von ant deployed), die Klasse also vom Container geladen ist. Eine Aufruf von Class.forName findet die Klasse also und liefert mir diese zurück. Dagegen scheiterte mein vorheriger Ansatz mit der loadClass-Methode des Systemloaders, weil diese Methode die nicht überschriebene findClass-Methode aufruft, welche in der Default-Implementation immer eine ClassNotFoundException wirft.

Habe ich das nun so richtig verstanden? Ansonsten schonmal ein dickes Dankeschön an Euch beide, Ihr habt mir schon sehr geholfen!

Grüsse, Ingo
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Instance of ClassLoader-Klasse? Java Basics - Anfänger-Themen 3
M Classpath Resource in .jar mit ClassLoader.getSystemResource zugreifen Java Basics - Anfänger-Themen 14
M Video in ClassLoader einfügen Java Basics - Anfänger-Themen 7
K OOP Ressource/Datei mit ClassLoader laden Java Basics - Anfänger-Themen 18
D Classloader will auf einma Klasse nich finden Java Basics - Anfänger-Themen 3
T ImageIcon ohne Classloader Java Basics - Anfänger-Themen 12
L ClassLoader - Daten aus einem Package laden Java Basics - Anfänger-Themen 3
G Classloader Hierarchie Java Basics - Anfänger-Themen 6
D ClassLoader in der Jar fehlerhaft Java Basics - Anfänger-Themen 3
I ClassLoader fiindet Klasse nicht Java Basics - Anfänger-Themen 3
D Probelm mit ClassLoader Java Basics - Anfänger-Themen 7
S Classloader JAR Archiv Java Basics - Anfänger-Themen 3
X ClassLoader Java Basics - Anfänger-Themen 2
L Schon wieder ClassLoader bzw. Classpath :-( Java Basics - Anfänger-Themen 3
G ClassLoader und OutPutStream Java Basics - Anfänger-Themen 3
C ClassLoader und Konstruktor Java Basics - Anfänger-Themen 3
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
Garrit1994 Continue funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
B Methoden Übergebe Variabel funktioniert nicht Java Basics - Anfänger-Themen 17
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
Fugover Programm funktioniert nicht Java Basics - Anfänger-Themen 11
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
M Java printf(Locale.... funktioniert nicht Java Basics - Anfänger-Themen 3
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
districon Backtracking funktioniert nicht ganz Java Basics - Anfänger-Themen 3
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
S Schleife funktioniert nicht Java Basics - Anfänger-Themen 2
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
T % funktioniert nicht Java Basics - Anfänger-Themen 2
D e(fx)clipse installieren funktioniert nicht Java Basics - Anfänger-Themen 3
D GPIO Nutzung mit Pi4J Library auf Raspberry funktioniert nicht Java Basics - Anfänger-Themen 3
F Java GUI-PaintComponent funktioniert nicht Java Basics - Anfänger-Themen 1
J equals funktioniert nicht - Warum Java Basics - Anfänger-Themen 13
L hilfe run button funktioniert nicht Java Basics - Anfänger-Themen 13
I Array funktioniert nicht. Java Basics - Anfänger-Themen 2
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
G Programm mit Schleife funktioniert nicht Java Basics - Anfänger-Themen 5
T Redirect funktioniert nicht Java Basics - Anfänger-Themen 3
R Mein Plugin funktioniert nicht? Java Basics - Anfänger-Themen 10
J Zufallszahl funktioniert nicht Java Basics - Anfänger-Themen 27
D Klassen add Methode funktioniert nicht. Java Basics - Anfänger-Themen 31
J ImagaIO funktioniert nicht unter Ubuntu Java Basics - Anfänger-Themen 23
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
N Wochentagberechner Ausgabe funktioniert nicht Java Basics - Anfänger-Themen 7
G Mein Java Projekt funktioniert nicht Java Basics - Anfänger-Themen 5
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
P Zeichenkette Zeichen ausschlißen funktioniert nicht richtig Java Basics - Anfänger-Themen 9
F Primzahlsuche Schleife funktioniert nicht, HILFE! Java Basics - Anfänger-Themen 8
M Methoden Arrays.deepequals() funktioniert nicht Java Basics - Anfänger-Themen 2
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
F Input/Output die eine txt-Datei funktioniert die andere nicht Java Basics - Anfänger-Themen 8
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
P Upload Button funktioniert nicht Java Basics - Anfänger-Themen 13
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
A TicTacToe funktioniert bis auf "schiefer" Sieg Java Basics - Anfänger-Themen 6
M Erste Schritte Importieren funktioniert nicht Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben