Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Classpath-Probleme mit jhall.jar (JavaHelp)

25 views
Skip to first unread message

Dirk Weber

unread,
Oct 8, 2008, 4:29:39 PM10/8/08
to
Hallo,

ich bastele gerade an einer kleinen Swing-Anwendung, welche das
JavaHelp-System verwenden soll, um dem Benutzer eine Online-Hilfe
anzubieten (http://java.sun.com/javase/technologies/desktop/
javahelp/).

Das Erstellen der Hilfe und Einbinden in die Anwendung scheint auch zu
funktionieren (jedenfalls kann ich auf die Hilfe ganz normal
zugreifen, solange ich die Anwendung unter Eclipse starte). Wenn ich
das Ganze jedoch auf der Kommandozeile folgendermaßen probiere, sieht
das Ganze schon anders aus:

Kommando:
java application -cp .

Auszug aus Stacktrace:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/help/
HelpSet
at java.lang.Class.getDeclaredMethods0(Native Method)...

Das Problem dabei ist, dass ich die für JavaHelp benötigte Jar-Datei
(jhall.jar) im selben Verzeichnis wie meine Anwendung liegen habe.
Von dem her müsste der Classpath doch eigentlich stimmen und die
entsprechende Klasse aus der Bibliothek doch geladen werden.

Wenn ich die Jar-Datei in den "\lib\ext" Ordner des JREs kopiere und
das gleiche Kommando wie zuvor absetze, startet meine Anwendung ganz
normal.

Ehrlich gesagt verwirrt mich das Ganze schon ziemlich. Sollte es nicht
eigentlich egal sein, WO eine Bibliothek liegt, solange der Classpath
korrekt gesetzt wird?

Würde mich über alle Tipps und Vorschläge freuen.

Viele Grüße,

Dirk

Bernd Eckenfels

unread,
Oct 8, 2008, 6:42:16 PM10/8/08
to
Dirk Weber <Dirk....@googlemail.com> wrote:
> Das Problem dabei ist, dass ich die für JavaHelp benötigte Jar-Datei
> (jhall.jar) im selben Verzeichnis wie meine Anwendung liegen habe.

Das alleine hat nix zu sagen, Java sucht nicht nach beliebigen JAR files im
startverzeichnis.

> Von dem her müsste der Classpath doch eigentlich stimmen und die
> entsprechende Klasse aus der Bibliothek doch geladen werden.

Gib das JAR File entweder mit -cp an oder wenn du ein ausführbares JAR hast
in dessen Manifest.

> Ehrlich gesagt verwirrt mich das Ganze schon ziemlich. Sollte es nicht
> eigentlich egal sein, WO eine Bibliothek liegt, solange der Classpath
> korrekt gesetzt wird?

Wenn du ihn gesetzt hast, ja. (-cp wird bei -jar ignoriert)

Gruss
Bernd

Dirk Weber

unread,
Oct 8, 2008, 7:22:52 PM10/8/08
to
Hallo und zunächst erst Mal danke für die Antwort :-).

On 9 Okt., 00:42, Bernd Eckenfels <e...@lina.inka.de> wrote:
> Gib das JAR File entweder mit -cp an oder wenn du ein ausführbares JAR hast
> in dessen Manifest.

Ich habe es auf deinen Tipp hin mit dem Kommando:
java Application -cp jhall.jar

versucht. Aber leider kommt noch immer dieselbe Exception. Die Klasse
"HelpSet", die der Classloader angeblich nicht finden kann, gibt es
aber wirklich in der angegebenen JAR-Datei.

Mein Programm steckt übrigens selbst nicht in einer JAR, sondern
besteht nur aus 5 einzelnen Class-Dateien (wovon die Klasse
"Application" die statische main-Methode beinhaltet).

Das Komische ist für mich eben, dass wenn ich die jhall.jar in den
entsprechenden ext-Ordner des JRE kopiere, die Klasse gefunden wird.
Eigentlich müsste das daraufhin deuten, dass der Classpath nicht
stimmt, aber ich sehe nicht wo.

Kurz noch nachfolgend meine Projektstruktur:

bin
|->Application.class
|->Editor.class
|->Editor$1.class
|->Editor$2.class
|->EditorContent.class
|->jhall.jar
|->helpfiles ->... (diverse Hilfedateien in Unterordnern)

Das Kommando rufe ich innerhalb des Ordners "bin" auf.

Vielleicht weiß noch jemand den ein oder anderen Tipp?

Vielen Dank,

Dirk

Bernd Eckenfels

unread,
Oct 8, 2008, 7:37:49 PM10/8/08
to
Dirk Weber <Dirk....@googlemail.com> wrote:
> bin
> |->Application.class
> |->Editor.class
> |->Editor$1.class
> |->Editor$2.class
> |->EditorContent.class
> |->jhall.jar
> |->helpfiles ->... (diverse Hilfedateien in Unterordnern)

java -cp .:jhall.jar Application

> Das Kommando rufe ich innerhalb des Ordners "bin" auf.

Müsste eigentlich gehen. Kannst du man den gesamten Output posten?

Gruss
Bernd

Alfred

unread,
Oct 9, 2008, 3:26:49 AM10/9/08
to
Dirk Weber wrote:
> ...
> Das Problem dabei ist, dass ich die für JavaHelp benötigte Jar-Datei
> (jhall.jar) im selben Verzeichnis wie meine Anwendung liegen habe.
> Von dem her müsste der Classpath doch eigentlich stimmen und die
> entsprechende Klasse aus der Bibliothek doch geladen werden.
> ...

Siehe Java Basics: http://www.boku.ac.at/javaeinf/jein.html
speziell: http://www.boku.ac.at/javaeinf/jein1.html#environment

Alfred

Dirk Weber

unread,
Oct 9, 2008, 4:28:09 AM10/9/08
to
On 9 Okt., 01:37, Bernd Eckenfels <e...@lina.inka.de> wrote:
> java -cp .:jhall.jar Application
mit deinem Tipp das aktuelle Verzeichnis UND die JAR als Classpath
anzugeben, hat es funktioniert. Ich musste nur den Doppelpunkt als
Trennzeichen durch ein Semi-Colon ersetzen. Außerdem hatte ich auch
die Reihenfolge der Aufrufparameter falsch herum: wie du es in deinem
Beispielaufruf ja auch zeigst muss man zuerst den -cp Parameter setzen
und erst am Ende den Namen der aufzurufenden Klasse mit der Main-
Methode spezifizieren. Danke für die Hilfe: hatte da einiges
durcheinander gebracht. Aber vermutlich sind das Fehler, die man nur
ein Mal macht :-).

Danke für den Tipp, die Seiten scheinen sehr gut zu sein. Aber die
kleine aber feine Reihenfolge der Parameter beim Aufruf von "java"
wird dort auch falsch gemacht. Dort steht:
"Die Ausführung des Bytecodes einer Java-Applikation erfolgt durch
Aufruf der Java Virtual Machine JVM (im Java Runtime Environment JRE)
in der Form

java Xxxxx

oder

java Xxxxx parameter parameter "

Aber genau die zweite Variante habe ich verwendet und sie scheint
nicht zu funktionieren. Laut der Hilfe zu "java" muss die korrekte
Reihenfolge der Aufrufparameter folgendermaßen aussehen:
"
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
"

Viele Grüße,

Dirk

Bernd Eckenfels

unread,
Oct 9, 2008, 6:37:54 PM10/9/08
to
Dirk Weber <Dirk....@googlemail.com> wrote:
> java Xxxxx parameter parameter "
>
> Aber genau die zweite Variante habe ich verwendet

Nein "parameter" meint Programmparameter nicht java optionen. Also das was
"main(String parametre ...)" bekommt.

Gruss
Bernd

0 new messages