Schon wieder ClassLoader bzw. Classpath :-(

Status
Nicht offen für weitere Antworten.

Luth

Mitglied
Hallo zusammen,

ich kämpfe gerade schon wieder mit der Einbindung meiner Klassen in mein Hauptprogramm rum und erhalte ständig
eine ClassNotFoundException wenn ich es ausserhalb von Eclipse laufen lassen will. Entweder ich kapier nicht was in den FAQ steht bezüglich Manifest und Classpath, oder der Fehler liegt irgendwo anders. Vielleicht kann ja mal jemand ein Auge drauf werfen.

Ich habe da das Hauptprogramm mit:
==> der Hauptdatei SiBSe.jar, mit einer Klasse ModulManager.class (und anderen zusammen aus Eclipse exportiert)
==> der ModulManager soll mir Dateien zur Laufzeit aus anderen Packages laden.

die anderen Packages mit einer zu ladenden Klasse:
==> Glaukom.jar
==> enthält eine Klasse Glaukom.GlaukomMOD
und so weiter. Die Packages bedinden sich im Unterverzeichnis \module der Anwendung und laufen soll das ganze auf Windows.

Das sind die wichtigsten Auszüge aus der Klasse Modulmanager. Die Namen werden mit getFileNames() aus einem Verzeichnis ausgelesen und sind richtig. Das Format für den Aufruf des URLClassLoader ist dann packagename.packageNameMOD.
Code:
package src.data;
    

public class ModulManager {
	
private File sourceDir;

private Modul[] module;

private Hashtable modulTable;

public ModulManager(String path) {
		sourceDir = new File(path);
		modulTable = new Hashtable();
		try{
		    try {
                module = this.getModule();
            } catch (NoClassDefFoundError e1) {
                CoreControl.showMessage("Fehler beim Laden der Module. Es wurden keine Module geladen.\n" +
    		    		"Bitte überprüfen Sie das Modulverzeichnis in den Einstellungen.\n\n"+e1.toString());
            } catch (ClassNotFoundException e1) {
                CoreControl.showMessage("Fehler beim Laden der Module. Es wurden keine Module geladen.\n" +
    		    		"Bitte überprüfen Sie das Modulverzeichnis in den Einstellungen.\n\n"+e1.toString());
            } catch (InstantiationException e1) {
                CoreControl.showMessage("Fehler beim Laden der Module. Es wurden keine Module geladen.\n" +
    		    		"Bitte überprüfen Sie das Modulverzeichnis in den Einstellungen.\n\n"+e1.toString());
            } catch (IllegalAccessException e1) {
                CoreControl.showMessage("Fehler beim Laden der Module. Es wurden keine Module geladen.\n" +
    		    		"Bitte überprüfen Sie das Modulverzeichnis in den Einstellungen.\n\n"+e1.toString());
            }
            for (int i=0 ; i<module.length ; i++)  {
				modulTable.put(module[i].getName(), module[i]);
			}
		} catch (NullPointerException e){
		    
		}
	}


private Modul[] getModule() throws NullPointerException, 
    				ClassNotFoundException, NoClassDefFoundError, InstantiationException, IllegalAccessException{
		String[] modulNames = getFileNames();
        Modul[] ret = new Modul[modulNames.length];
        
        URL[]url = new URL[modulNames.length];
        try {
            for (int i = 0; i<url.length;i++){
                url[i]= new File(CoreControl.config.getPath()).toURL();    
            }
          } catch (MalformedURLException e) {
        	CoreControl.showMessage("Fehler beim Laden der Module.\n" +
        		"Überprüfen sie bitte das angegebene Verzeichnis."+e.toString());
            //e.printStackTrace();
        }
        URLClassLoader cl = new URLClassLoader(url);
        for (int i = 0; i < modulNames.length; i++) {
            Class c = null;
            Object o;
          
                c = cl.loadClass(modulNames[i]);
                o = c.newInstance();
                ret[i] = (Modul) o;
           
        }
        return ret;
    }

protected String[] getFileNames() {

		String[] classFileNames;
		File modulDir = new File(CoreControl.config.getPath());
		String[] names = modulDir.list();
		String path = CoreControl.config.getPath();
		LinkedList classFiles = new LinkedList();
		for (int i = 0; i < names.length; i++) {
		    if (names[i].toLowerCase().endsWith("jar")){
		       
		            names[i] = names[i].substring(0,names[i].lastIndexOf("."));
		            classFiles.add(names[i]);
		    }
		}
		Object[] cl = new Object[classFiles.size()];
		cl = classFiles.toArray();
		classFileNames = new String[classFiles.size()];
		if ( CoreControl.config.getVerbose()==true){
			System.out.println("Gefundene Module: ");}
		for (int k = 0; k < cl.length; k++) {
			classFileNames[k] = cl[k].toString()+"."+cl[k]+"MOD";
			if ( CoreControl.config.getVerbose()==true){
				System.out.println(classFileNames[k]);
			}
		}
		Arrays.sort(classFileNames);
		return classFileNames;
	}
}


Gestartet wird das ganze mit einer .bat Datei aus c:\Test herraus:
set CLASSPATH=%CLASSPATH%;C:\Test\;c:\Test\module\;.\;
java -Xmx256m -jar SiBSe.jar
pause

Die zu ladenden .jar Dateien in die Manifest-Datei eintragen muss man nicht extra oder? Ich weis ja erst zur Laufzeit
welche da im Unterverzeichnis rumliegen. Ich hoffe das war alles was benötigt wird und jemand hat kurz Zeit. Das ganze treibt mich noch in den Wahnsinn. Auf Wunsch schicke ich auch gerne den ganzen Quellcode oder das EclipseProjekt zu wenn's was hilft.

Lutz
 

Luth

Mitglied
Hmm...hat nur keiner Lust oder Zeit sich das Zeug anzuschauen, liegt's am Wochenende
oder woran sonst?
Bisher hat immer sehr schnell jemand geantwortet, daher meine Verwunderung. Gebt mir
wenigstens ne Resonanz ob jemand hier reinschaut oder ob ich mit mir selber rede.
:)
 

Bleiglanz

Gesperrter Benutzer
java sucht im ordner module NICHT nach allen .jar dateien
und bindet diese dann automatisch in den Classpath ein

bei class dateien ists zwar so, nicht aber bei jars!

=> es muss jede jar einzeln im cp dabei sein!

(nimm lieber ein ant skript und machs mit dem java target und
**/*.jar, das macht das automatisch)
 

Luth

Mitglied
Hallo Bleiglanz,

das war klar und deutlich. Ich danke auch für den Tip mit Ant, das werde ich mir mal anschauen.
Vorerst werde ich versuchen darauf zurückgreifen die Namen beim ersten Programmstart einzulesen
und die .bat Datei dann mit korrektem Classpath generieren zu lassen, damit die Jars beim zweiten Start
gefunden werden. Ich markier es daher mal als erledigt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
D Schon wieder double -.- Java Basics - Anfänger-Themen 4
L Und schon wieder :=( Java Basics - Anfänger-Themen 3
J Schon wieder Rekursionsproblem Java Basics - Anfänger-Themen 3
V Schon wieder ein kleines problem...dieses mal mit do-while loop Java Basics - Anfänger-Themen 9
C jar als Applet einbinden will schon wieder nicht Java Basics - Anfänger-Themen 7
T schon wieder ausführbare .jar-dateien Java Basics - Anfänger-Themen 2
D was ist denn nun schon wieder? Einfaches JSP. Java Basics - Anfänger-Themen 6
W Schon wieder Taschenrechner Java Basics - Anfänger-Themen 13
F Schon wieder replace Java Basics - Anfänger-Themen 7
S Schon wieder ein Problem - diesmal sortieren Java Basics - Anfänger-Themen 8
G Compiler hängt schon wieder Java Basics - Anfänger-Themen 14
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
berserkerdq2 Hashmap, wie prüfe ich ob ein Key schon existiert Java Basics - Anfänger-Themen 19
nbergmann eclipse schon mit "HalloWelt" unverständlich. Java Basics - Anfänger-Themen 4
Naxon89 Threads Android AysncTask => Überprüfen, ob ein Ergebniss schon vorliegt Java Basics - Anfänger-Themen 5
K Wie kontrolliere ich ob ich die Zahl in meinem Array schon hab? Java Basics - Anfänger-Themen 9
B Prüfen, ob es schon einen Termin gibt in einem Zeitraum Java Basics - Anfänger-Themen 5
M Suchfunktion schon bei Teilen des Wortes Java Basics - Anfänger-Themen 4
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
N kein Sound beim Öffnen der jar-Datei, in Eclipse schon Java Basics - Anfänger-Themen 1
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 13
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 1
I Hilfe beim löschen schon Buchstaben. Java Basics - Anfänger-Themen 4
N Dynamisch erzeugtes Label wird nicht angezeigt, TextField schon Java Basics - Anfänger-Themen 1
MrSnake Prüfen ob TitledPane schon besteht Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
C Check ob eine HashMap schon existiert Java Basics - Anfänger-Themen 16
C OOP Erstellen eigener Objekte die es schon gibt "schlau"? Java Basics - Anfänger-Themen 3
M Ist die Hamcrest Bibliothek auch schon in Junit 4.11 verfügbar? Java Basics - Anfänger-Themen 1
V relativer Pfad geht nicht, absolut schon? Java Basics - Anfänger-Themen 3
S Threads Thread wenn extends schon vergeben Java Basics - Anfänger-Themen 8
H Prüfen, ob jpg image schon vorhanden ist, bevor es geladen wird Java Basics - Anfänger-Themen 13
K String kommt schon in Vector vor? Java Basics - Anfänger-Themen 36
S A* Path Algorithmus in Java schon vorhanden Java Basics - Anfänger-Themen 3
M In Netbeans kein Problem, im Terminal schon Java Basics - Anfänger-Themen 3
N leere JTextArea wird nicht angezeigt - TextArea aber schon? Java Basics - Anfänger-Themen 5
M Kein Sound in der .jar, davor schon Java Basics - Anfänger-Themen 6
Luk10 Serialisierung bei schon vorhandener Datei Java Basics - Anfänger-Themen 15
H "Adressbuch" erstellen - Problem schon bei Datumsüberprüfung Java Basics - Anfänger-Themen 9
A Aufruf einer externen schon laufenden Anwendung Java Basics - Anfänger-Themen 3
K kein Sound beim Öffnen der jar-Datei, in Eclipse schon Java Basics - Anfänger-Themen 2
G integer schon initalisiert Java Basics - Anfänger-Themen 11
L beim ersten compilen schon erste probleme Java Basics - Anfänger-Themen 8
A Fehler schon bei kleinigkeiten Java Basics - Anfänger-Themen 9
S kann man das kürzer schreiben? bzw gibts dafür schon was? Java Basics - Anfänger-Themen 6
G Schon die Installation nicht hinbekommen ? Java Basics - Anfänger-Themen 4
S ich stör schon widr wegen meine gui Java Basics - Anfänger-Themen 2
M imageicon aus jar (ja hab die suchfunktion schon benutzt :)) Java Basics - Anfänger-Themen 2
G Button schon gedrückt wenn "mouseOver" Java Basics - Anfänger-Themen 3
B schon beim einsteiger-beispiel durchgefallen. Java Basics - Anfänger-Themen 2
B schon mal mit JavaBeans Activation Framework gearbeitet? Java Basics - Anfänger-Themen 2
S Schon jetzt problem =(=( Java Basics - Anfänger-Themen 51
R Abfragen, ob schon ein Eintrag in der HashMap steht Java Basics - Anfänger-Themen 11
G wenn auch schon oft gefragt (Konstruktor , Instanzen , usw) Java Basics - Anfänger-Themen 6
DrahtEck Schleife soll wieder da anfangen wo ich es möchte ! Java Basics - Anfänger-Themen 17
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
W In alten Code zurück- und dort wieder zurechtfinden? Java Basics - Anfänger-Themen 17
I Passwort in Datenbank speichern um später wieder auszulesen Java Basics - Anfänger-Themen 5
Temsky34 Wie bekomme ich dieses Java-Warning wieder weg? Java Basics - Anfänger-Themen 2
T j.u.Scanner(Sys.in).nextLine() wieder schließen? Java Basics - Anfänger-Themen 5
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
Naxon89 Input/Output Ein PDF in einem BLOB umwandeln um ihn dann als PDF wieder anzuzeigen Java Basics - Anfänger-Themen 3
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
MichelNeedhelp Brauche zu diesem Labyrinth ein Skript? Der Hamster soll im Urzeigersinn das ganze Labyrinth abgehen und wieder an seinem Ursprungsplatz sein. Java Basics - Anfänger-Themen 40
D Codeblöcke, die immer wieder im Programmverlauf benötigt werden Java Basics - Anfänger-Themen 5
TimoN11 Array -> Schleife wieder von vorne durchlaufen lassen Java Basics - Anfänger-Themen 1
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
J Selektiertes Element von jComboBox zwischenspeichern und wieder einsetzen Java Basics - Anfänger-Themen 0
S Nutzereingabe splitten und in string array wieder ausgeben. Java Basics - Anfänger-Themen 1
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
N Wie kann ich einen String wieder zusammensetzen und ausgeben lassen? Java Basics - Anfänger-Themen 9
C Array-Eintrag wieder auf Null setzen Java Basics - Anfänger-Themen 3
W Verschachtelte Objekte wieder auspacken Java Basics - Anfänger-Themen 3
M Array immer wieder um ein Element erweitern Java Basics - Anfänger-Themen 6
CptK Methoden Event bei gedrückter Maustaste immer wieder ausführen Java Basics - Anfänger-Themen 1
CptK Klassen Event bei gedrückter Maus immer wieder mit Pause ausführen Java Basics - Anfänger-Themen 2
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
M JTextField blitzt immer wieder nur auf Java Basics - Anfänger-Themen 12
CptK Datentypen Verdrehte Wörter wieder herstellen Java Basics - Anfänger-Themen 21
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
I Methoden Schleife immer wieder durchlaufen lassen Java Basics - Anfänger-Themen 15
F Immer wieder gleiche Zufallszahl? Java Basics - Anfänger-Themen 4
M Schleifenergebnis in selbiger wieder verwenden Java Basics - Anfänger-Themen 7
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37
L jar, class, java und wieder zurück Java Basics - Anfänger-Themen 8
M aus Fenster anderes Fenster öffnen und wieder umgekehrt Java Basics - Anfänger-Themen 5
J Fenster wieder unsichtbar machen Java Basics - Anfänger-Themen 2
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
S Sound stoppen und nach Pause wieder abspielen Java Basics - Anfänger-Themen 6
T while schleife starten , beeneden und wieder Starten Java Basics - Anfänger-Themen 8
I Zähler, der erst wieder zählt nachdem Pixel wieder andere Farbe hat Java Basics - Anfänger-Themen 2
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
N Methode auslagern mal wieder Java Basics - Anfänger-Themen 8
F Inhalt einer Variable auswerten, die sich immer wieder ändert Java Basics - Anfänger-Themen 1
Bluedaishi for schleife um Dateien wieder zusammen zu fügen Java Basics - Anfänger-Themen 11
I SHA512 verschlüsseln und dann wieder auslesen? Java Basics - Anfänger-Themen 35
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben