• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Java problem - klasse in Jar wird nicht gefunden

Marty82

Golden Delicious
Registriert
21.11.07
Beiträge
8
Hallo Leute, bin zwar nich mehr ganz Neu beim Mac aber heute hab ich nen Problem bekommen wo ich überhaupt nicht mehr durchsteige. Hab hier noch Tiger laufen, immer schön brav alles geupdatet. Also, hab hier nen Java Programm was ich für die Uni brauch. Ist auch gleichzeitig von der Uni programmiert. Ansich läuft das proggi, aber eine bestimmte Funktion/Fenster läuft nicht. Auf der Console bekomme ich die Info das eine Klasse, bzw. eine Variable einer Klasse nicht gefunden werden kann. Habe mich darauf mit dem verantwortlichen Coder in Verbindung gesetzt. Die Klasse und alles ist in der Jar. Test bei nem Freund auf gleichem OS --> läuft. Also was läuft hier schief? Hab ich Java irgendwann falsche pathangaben oder so untergejubelt ohne es zu merken? Hab auch nach stundenlangem googlen nichts gescheites gefunden. Wenn einer ne Idee hat, irgendwas, das wär echt super. Klar könnt ich das teil auch im Parallels laufen lassen..... Anyway, schon Mal danke für eure Antworten Marty
 

Katzenfutter

Kaiser Wilhelm
Registriert
16.12.06
Beiträge
174
Ohne dass Du das *.jar zur Verfügung stellst wird Dir wohl kaum jemand helfen können.
Was man definitiv machen kann: *.jar in *.tar umbenennen und dann entpacken. So sieht man bspw. wie die Klassen im Java-Archiv geordnet sind (falls man prüfen will, ob eine relative URI zur Klasse xyz nicht stimmt).

Evtl. hat Dein Freund einfach eine neuere Version von Java. Die VM´s sollten, bis auf Kleinigkeiten, 100% identisch sein. Compile once, run everywhere. Darum auch der Begriff "Virtual Machine".
 

Marty82

Golden Delicious
Registriert
21.11.07
Beiträge
8
naja, beide tigers sind laut versionsnummern etc identisch.
Ich hab irgendwann mal was mitm classpath gemacht.
Hatte aber nie auf andere Javaprogs auswirkungen. Netbeans und co laufen ohne probs.
Kanns trotzdem was mitm classpath zu tun ham?

Getart etc hab ich schon, is alles ok.
 

Katzenfutter

Kaiser Wilhelm
Registriert
16.12.06
Beiträge
174
Die Ausgabe von "java -version" im Terminal bringt Dir die genaue Version der VM.
java -version
java version "1.5.0_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-284)
Java HotSpot(TM) Client VM (build 1.5.0_16-133, mixed mode, sharing)

Wie schon weiter oben beschrieben sind die Klassen in einem *.jar hierarchisch wie in einem Dateisystem angeordnet, so wird auch darauf intern von den Klassen referenziert und zugegriffen. Wenn eine Klasse intern falsch referenziert wird, so würde diese Anwendung in keiner VM laufen, da ganz einfach der Pfad zu einer benötigten Klasse nicht passt.

Der eigentliche Java-Klassenpfad würde das Verhalten Deiner VM ziemlich drastisch verändern. Bspw. könntest Du den Pfad zum JDK/JRE verändern und meinetwegen ein altes Java 1.3 hier einbinden.
Das würdest Du merken wenn in Deinem Code beispielsweise Collections oder Autoboxing von Variablen nutzt.
Wenn bspw. der JDBC-Treiber für MySQL nicht im Klassenpfad Deines Projekts von NetBeans liegt, Du aber in einer Klasse eine Verbindung zu der Datenbank aufbauen willst, so wird Dir Java dies mit einer entsprechenden Exception quittieren.
Was hier hilfreich wäre: eine genaue Ausgabe der Exception die Du erhältst...
 

Marty82

Golden Delicious
Registriert
21.11.07
Beiträge
8
Hi und thx für die Info :)
Hab das Problem mittlerweile gelöst bekommen.

Falls es wen interessiert:
Das Proggi nutzt intern das htmlunit-framework (nach längerem blabal mit dem maintainer erfahren)
Da ich htmlunit aber selber auch für nen anderes Projekt genutzt hab, hatte ich htmlunit bei den java libraries und extensions hinzugefügt.
Nun ist wohl die in dem proggi benutzte htmlunitversion was älter und die neue unterstützt einige der "alten" feldinitialisierungen nicht mehr.
Die VM hat also das in den extensions liegende htmlunit geladen und nicht das aus dem jar. Daher die Exception.

btw: isses normal, dass spotlight (Tiger) nicht in solch tiefen des systems indexiert?
Hab die htmlunit-jars in der extension erst bei manueller überprüfung der Class/Root Pfade wieder entdeckt.