Classloader ohne Package

D

Dr.Classloader

Gast
Hallo,

ich versuche gerade eine während der Laufzeit kompillierte class-Datei mit dem Classloader zu laden.

Leider wird bei folgendem Code immer eine "ClassNotFoundException" geworfen.


Java:
			cl = new URLClassLoader(new URL[] { file.toURI().toURL() });
			Class<?> c = cl.loadClass(packageName + className);// +file.getName());
file ist eine gültige ".class-File" und in className steht der passende Klassenname drin (ohne .class)

wobei
Java:
packageName = ""
weil die Klasse kein Package hat. Muss da dann vielleicht was anderes vor?
Zuvor hatte ich mit dieser Methode bereits vor laufzeit Kompilierte Klassen mit einem Package geladen, was auch Funktioniert hat (Natürlich stand in packageName enstprechendes drin).

Wäre toll wenn mir jemand helfen könnte!

Viele grüße
 
T

tröööt

Gast
mich würde mal viel mehr interessieren auf was "file" zeigt ...
deinem kommentar zu folge nämlich direkt auf das CLASS-File selbst ... und ich denke genau das wird der fehler sein ...
versuche einfach mal nur auf das verzeichnis in dem das file liegt zu zeigen ... also "file.getParentFile()" falls in "file" direkt das class-file selbst steht ...

was natürlich auch geht vorher in ein JAR packen und dann "file" auf das JAR zeigen lassen ...

aber ich denke direkt auf das CLASS-File wird wohl nicht gehen ...
 
D

Dr.Classloader

Gast
Hi,

vielen Dank für die Antwort erstmal!

file zeigt tatsächlich auf die CLASS-File selbst, aber das ist in Ordnung.
Vorher hats auch so geklappt.

Die Exception wird ausserdem durch diese Zeile hervorgerufen:
Java:
            Class<?> c = cl.loadClass(packageName + className);// +file.getName());
Die Klasse wird nicht gefunden, deshalb nehme ich an das der String den ich übergebe nicht Richtig ist.
Kann es vielleicht sein, das vor der "className" noch etwas stehen muss, sozusagen um anzuzeigen, dass die Klasse in keinem Package ist?
Hab dazu leider nichts finden können.
 
M

maki

Gast
Man kann keine Klassen aus dem Default Package importieren von Klassen aus die selber nicht im Default Package liegen, scheint wohl auch für Classloader zu gelten.
 
D

Dr.Classloader

Gast
Oh, das ist Schlecht.

Die Datei, die ja wie gesagt zur laufzweit kompiliert wird, liegt in einem Externen Verzeichnis, denn der Benutzer soll den Code manipulieren können.
Gibt es denn dann trotzdem eine möglichkeit, diese Klasse in ein Package zu packen?

Oder wie könnte man hier vorgehen?

Vielen Dank für die Antworten bisher auf jeden Fall schonmal!
 
D

Dr.Classloader

Gast
Ok, aber die CLASS-File liegt ja dann im Falschen Ordner, deshalb wird es nicht funktionieren.
Naja notfalls muss ich die Datei dann halt in ein internes Verzeichnis verschieben oder kopieren.

Hatte aber gehofft das es eine schönere Lösung gibt.

Trotzdem vielen Dank
 
T

tröööt

Gast
ich frag mich bei sowas immer wieder : WELCHER SINN STECKT DAHINTER ? warum source-files vom user bearbeiten lassen und diese dann compilen und sich mit solchen problemen rumärgern anstatt ein ordentliches modular-system zu nutzen was standardisierte schnittstellen hat ...

irgendwie für mich ziemlich sinn-endfremdet und eher in richtung proof-of-concept ...

wie gesagt : ich vermute das es auch unter anderem daran liegt das "file" halt direkt auf das class-file zeigt ... ausprobieren muss ichs aber jetzt auch nicht ...
und das andere was gesagt wurde das man keine klasse laden können soll die in keinem package steckt ... hmm .. für mich auch nicht wirklich sinnvoll ... obwohl man natürlich immer packages nutzen sollte ... alleine der gliederung wegen ...


ich werd mir das ganze mal in ner test-umgebung ansehen
 
T

trööt

Gast
also ich weis echt nich was euer problem ist ...

simpler aufbau

java
-> Loader.java
-> test
-> Test.java

source
Java:
import java.io.*;
import java.net.*;
public class Loader
{
	public static void main(String[] args) throws Exception
	{
		URLClassLoader loader=new URLClassLoader(new URL[] { (new File("test")).toURI().toURL() });
		Class<?> clazz=loader.loadClass("Test");
		Object instance=clazz.newInstance();
	}
}
Java:
public class Test
{
	static
	{
		System.out.println("Test loaded");
	}
	public Test()
	{
		System.out.println("Test constructed");
	}
}

und es ist völlig egal ob ich in zeile 7 nur den ordner "test" angeben oder direkt das classfile "test\Test.class" ...
ich erhalte immer folgende ausgabe

Code:
Test loaded
Test constructed


ergo : die idee funktioniert ... kann also nur an der klasse liegen die versucht wird zu laden
 
D

Dr.Classloader

Gast
Besten Dank, dass du dir die Arbeit gemacht hast.
Hab jetzt nochmal ein bisschen rumprobiert und offenbar ist es so, dass die Klasse nur geladen wird, wenn Sie in dem "bin" Ordner liegt.

Es funktioniert also nicht in meinem Externen Verzeichnis.
Wird mir also wahrscheinlich nichts anderes Übrig bleiben, als die Datei zu verschieben.
 
T

tröööt

Gast
Besten Dank, dass du dir die Arbeit gemacht hast.
Hab jetzt nochmal ein bisschen rumprobiert und offenbar ist es so, dass die Klasse nur geladen wird, wenn Sie in dem "bin" Ordner liegt.

Es funktioniert also nicht in meinem Externen Verzeichnis.
Wird mir also wahrscheinlich nichts anderes Übrig bleiben, als die Datei zu verschieben.

glaub ich erlich gesagt nicht ... ich hab ja gezeigt das es geht ...

mir fallen jetzt aber eher zwei andere dinge ins auge :

1) ist die klasse so überhaupt compile-fähig wie sie der user schreibt ?
2) wird das source-file denn auch überhaupt compiled ?

weil ein source-file ".java" kannst du natürlich NICHT über einen classloader laden ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
L Eigenener ClassLoader wirft java.lang.NoClassDefFoundError Allgemeine Java-Themen 0
N Klasse via ClassLoader laden Allgemeine Java-Themen 2
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
K [Refactoring] ClassLoader Verzeichnis durchsuchen lassen Allgemeine Java-Themen 7
schlingel Webstart/Applet Problem - Classloader-Bug Allgemeine Java-Themen 7
M Security Manager für bestimmte Klassen/Classloader? Allgemeine Java-Themen 3
hdi ClassLoader / Constructor Call intern Allgemeine Java-Themen 11
C inteface not visible from classloader Allgemeine Java-Themen 2
M jdbc treiber (h2) mit eigenem ClassLoader laden Allgemeine Java-Themen 4
B Eigener ClassLoader Allgemeine Java-Themen 9
MQue ClassLoader Pfad ausgeben Allgemeine Java-Themen 6
S Problem mit ClassLoader.getSystemResource !! Allgemeine Java-Themen 3
V Image laden - URL über ClassLoader ermitteln Allgemeine Java-Themen 2
J Eigener ClassLoader wird nicht immer verwendet Allgemeine Java-Themen 3
E Wieder mal der Classloader Allgemeine Java-Themen 6
F ClassLoader und "Cache" Allgemeine Java-Themen 2
MQue ClassLoader Allgemeine Java-Themen 5
N ClassLoader - Laden von Bytecode aus einer Datenbank Allgemeine Java-Themen 6
P Klasse über eigenen Classloader laden: SecurityException Allgemeine Java-Themen 11
N Classpath mit ClassLoader künstlich erweitern Allgemeine Java-Themen 2
P System.getProperty zu Classloader Allgemeine Java-Themen 21
G Classloader Problem Allgemeine Java-Themen 10
M Bibliotheksname zur Laufzeit ermitteln (Classloader) Allgemeine Java-Themen 7
MQue ClassLoader Allgemeine Java-Themen 18
G Problem mit URL classloader Allgemeine Java-Themen 10
S classloader + jar + resourcen in dem jar Allgemeine Java-Themen 4
F mit classloader klassen ausserhalb *.jar einlesen Allgemeine Java-Themen 4
G Font mittels ClassLoader in .jar wirft NotFoundException Allgemeine Java-Themen 10
P Kompilerfehler: at java.lang.ClassLoader.loadClassInternal(U Allgemeine Java-Themen 16
T ClassLoader und Zugriff auf unbekannte Klassen Allgemeine Java-Themen 5
C ClassLoader - dymisches Laden von JDBC Drivers Allgemeine Java-Themen 3
R Problem mit Classloader Allgemeine Java-Themen 2
D Programm mit eigenem ClassLoader funktioniert nicht Allgemeine Java-Themen 12
K Problem mit ClassLoader - Laden von Resourcen aus Jar's Allgemeine Java-Themen 14
C Problem mit ClassLoader Allgemeine Java-Themen 2
T Brauche Hilfe bei ClassLoader Allgemeine Java-Themen 2
G cachender ClassLoader u.v.m. Allgemeine Java-Themen 5
G ClassLoader Allgemeine Java-Themen 3
R ClassLoader funktioniert in Verbindung mit JAR-Datei nicht Allgemeine Java-Themen 8
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
T Datum OHNE Uhrzeit Zeitzonen-übergreifend Allgemeine Java-Themen 4
N mit sysout, ohne sysout Allgemeine Java-Themen 17
O Programmierprüfung auf moodle ohne Hilfsmittel... Allgemeine Java-Themen 23
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
M Switches ohne String Allgemeine Java-Themen 18
A Java JDK ohne Oracle Konto Allgemeine Java-Themen 5
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
A Java ListNode Element einfügen ohne Bibliothek Allgemeine Java-Themen 6
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
N Keylistener ohne Dazugehörige Gui Allgemeine Java-Themen 6
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
Kirby.exe Keyboard Input ohne Enter Allgemeine Java-Themen 43
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S Potenzieren mit rationalen Potenzen ohne Math.pow Allgemeine Java-Themen 16
F Timestamp in Oracle ohne Formatierung reinbekommen Allgemeine Java-Themen 7
M Drucken ohne Dialog Allgemeine Java-Themen 1
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
J .java-Dateitext Compile zur Laufzeit ohne File Allgemeine Java-Themen 15
O Zugriff auf mySQL ohne JDBC Allgemeine Java-Themen 3
S Input/Output Jave.utill.logging ohne Default-Locale also in Englisch Allgemeine Java-Themen 3
J ftp - delete file ohne appache Allgemeine Java-Themen 8
H float Berechnung: Ergebnis ohne wissenschaftliche Notation Allgemeine Java-Themen 5
offi Excel mit Inhalten aus DB öffnen ohne zu speichern Allgemeine Java-Themen 8
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
S Java Plugin System (ohne OSGI) Allgemeine Java-Themen 10
G Array ohne Aufzählungszeichen ausgeben Allgemeine Java-Themen 6
Aruetiise Swing JOptionPane ohne denn Thread zu pausieren Allgemeine Java-Themen 1
RalleYTN Audiolänge einer MP3 Datei erhalten ohne diese vollständig zu laden Allgemeine Java-Themen 15
RalleYTN 2D-Grafik Bild ohne AWT, Swing und JavaFX rotieren Allgemeine Java-Themen 12
A BufferedReader ohne System.in Allgemeine Java-Themen 9
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
B Applikation ohne (direkt)Java installiert zu haben auszuführen Allgemeine Java-Themen 8
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
OnDemand JavaMail ohne Anhang senden Allgemeine Java-Themen 4
N String ins Clipboard kopieren ohne makieren. Allgemeine Java-Themen 12
T Ziffernsumme ohne String Operatoren Allgemeine Java-Themen 4
E Threads Ausführung in Threads ist langsamer als ohne Threads Allgemeine Java-Themen 13
R NullPointerException Ohne Grund Allgemeine Java-Themen 5
RalleYTN JPEG mit CMYK(ohne JAI oder TwelveMonkeys!) Allgemeine Java-Themen 0
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
HarleyDavidson Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern Allgemeine Java-Themen 1
Y String to Double ohne ParseDouble Allgemeine Java-Themen 11
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
A Linux: Native Library mit Rootrechten ohne Prozess mit sudo zu starten Allgemeine Java-Themen 1
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
A Konstrukt ohne Main für Xml-Parser Allgemeine Java-Themen 1
S Performante Visualisierung groẞer Datenmengen (ohne JFreeChart) Allgemeine Java-Themen 22
M Permutation ohne Wiederholung mit rekursion Allgemeine Java-Themen 4
C HtmlUnit Daten einer Tabelle bekommen ohne, dass diese eine ID aufweist Allgemeine Java-Themen 1
F File.listFiles ohne .sort Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben