ubuntuusers.de

JavaKara: incorrect classpath

Status: Gelöst | Ubuntu-Version: Kubuntu 7.10 (Gutsy Gibbon)
Antworten |

FriedChicken

Anmeldungsdatum:
10. Juni 2006

Beiträge: 1751

Wohnort: Deizisau

Hallo,

heute im Informatikkurs haben wir das Programm JavaKara kennen gelernt. Es ist ein kleines Java-Lern-Programm, dass nur aus der Datei javakara.jar besteht und unter SwissEdu heruntergeladen werden kann.
Eigentlich ganz nett das Programm. Ist zwar keine echte IDE, aber die mitgelieferten Übungen sind recht anschaulich und - dank Lösungen - auch gut selber nachzuvollziehen.

Allerdings gibt es ein ganz dickes Problem: Wenn ich ein Programm kompilieren will, meldet der Compiler:

Executed: /usr/bin/javac -classpath /home/tux/javakara.jar:/home/tux/JavaKara; /home/tux/JavaKara/Tunnel2.java
incorrect classpath: /home/tux/JavaKara;


Meine Vermutung ist, dass es an dem Semikolon liegt, da der Hilfetext von javac nichts derartiges vorschreibt. Der classpath-Paramater wird automatisch übergeben und kann nicht verändert werden. Aber unter Windows tut es doch auch?!

Leider ist JavaKara zwar Freeware, aber closed source. Hat vielleicht trotzdem jemand einen Tipp für mich? Ein Work-around oder eine andere Vermutung?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17608

Wohnort: Berlin

Bei mir startet javakara gar nicht erst:

java -jar /opt/mini/javakara.jar
XmlResourceAccess.constructor: could not read config file
 can not execute without - exiting.java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"
java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"
        at javax.xml.parsers.DocumentBuilderFactory.setXIncludeAware(DocumentBuilderFactory.java:590)
        at ch.karatojava.util.XmlResourceAccess.<init>(Unknown Source)
        at ch.karatojava.kapps.Application.startApplication(Unknown Source)
        at ch.karatojava.kapps.javakaraide.JavaKaraApplication.main(Unknown Source)


Welchen configfile es lesen will - ein Geheimnis.

Ist zwar nicht aus dem Verzeichnis gestartet, in dem javakara.jar liegt, aber das ändert auch nichts.

FriedChicken

(Themenstarter)

Anmeldungsdatum:
10. Juni 2006

Beiträge: 1751

Wohnort: Deizisau

Doch, das tut bei mir. Habs grad mal von der Konsole aus getestet: Keine einzige Meldung.
Sun Java 6 scheint aber Voraussetzung zu sein.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17608

Wohnort: Berlin

 java -version
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode, sharing)

fnumatic

Anmeldungsdatum:
20. Februar 2007

Beiträge: 379

bei mir startet es auch.

java -jar javakara.jar

FriedChicken

(Themenstarter)

Anmeldungsdatum:
10. Juni 2006

Beiträge: 1751

Wohnort: Deizisau

@user_unknown:
Genau die gleiche Version habe ich auch.

@fnumatic:
Funktioniert bei dir das Kompilieren?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17608

Wohnort: Berlin

Okay - helft dem Helfer, damit er Euch helfen kann.

In meinem $JAVA_HOME/jar/lib/ext - Verzeichnis hatte ich eine gnujaxp.jar, die wohl meinte für xml-Fragen zuständig zu sein.
Wenn ich jetzt javakara starte, dann bekomme ich auch ein Semikolon in eine ähnliche Meldung geschmuggelt:

Executed: javac -classpath /opt/min/javakara.jar:/home/stefan; /home/stefan/FindeBaum.java


Es ist natürlich Blödsinn ein solches Kommando mit einem überflüssigen Semikolon in der Anzeige zu garnieren, wie es auch Blödsinn ist das Feld unmarkierbar zu machen, so daß man Meldungen nicht mit cut'n'paste übernehmen kann.

Weswegen Dein Classpath incorrect sein soll kann ich nicht erkennen, nachdem es das Semikolon nicht ist.

FriedChicken

(Themenstarter)

Anmeldungsdatum:
10. Juni 2006

Beiträge: 1751

Wohnort: Deizisau

Aber das Kompilieren an sich funktioniert ohne des Classpath-Fehler? Das heißt, es muss an mir liegen ...

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17608

Wohnort: Berlin

FriedChicken hat geschrieben:

Aber das Kompilieren an sich funktioniert ohne des Classpath-Fehler? Das heißt, es muss an mir liegen ...

Das Kompilieren funktioniert fehlerlos - ja.
Es muß an Dir liegen? Wieso?
Ich denke Du hast die 4, 5 Schritte reproduzierbar nachvollzogen, aber bei Dir funktioniert es nicht.
Solange wir nicht wissen wieso wissen wir nicht, woran es liegt.
Ich würde an die email-Adresse auf der Seite schreiben - wer closed-source macht, der will selbst auf die Fehlersuche gehen.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17608

Wohnort: Berlin

Da fällt mir ein: Du kannst natürlich sehen was der Javacompiler auf der Shell sagt, wenn Du

/usr/bin/javac -classpath /home/tux/javakara.jar:/home/tux/JavaKara /home/tux/JavaKara/Tunnel2.java


eingibst.
Das:

/usr/bin/java -version
java -version
which java


wär auch noch interessant.

fnumatic

Anmeldungsdatum:
20. Februar 2007

Beiträge: 379

bei mir kompiliert es auch.
der entsprechende Code für den classpath:

protected String getClassPath(String string) {
	StringBuffer stringbuffer = new StringBuffer();
	stringbuffer.append("-classpath ");
	if (OS_WINDOWS)
	    stringbuffer.append("\"");
	File file = new File(System.getProperty("java.class.path"));
	stringbuffer.append(file.getAbsolutePath());
	if (OS_WINDOWS)
	    stringbuffer.append(";");
	else
	    stringbuffer.append(":");
	stringbuffer.append(string);
	stringbuffer.append(";");
	if (OS_WINDOWS)
	    stringbuffer.append("\"");
	return stringbuffer.toString();
    } 

FriedChicken

(Themenstarter)

Anmeldungsdatum:
10. Juni 2006

Beiträge: 1751

Wohnort: Deizisau

Danke fnumatic für den Code. Ich weiß zwar nicht wo du ihn her hast (Disassembling?), aber zumindest hat er mir einen Hinweis gegeben.
Wenn ich den Code richtig interpretiere, werden für Windows und andere Betriebssysteme unterschiedliche Kommandobruchstücke erzeugt. Unter Windows z.B.
-classpath "C:\Java\javakara.jar;C:\Java;", unter Linux dagegen
-classpath /home/tux/Java/javakara.jar:/home/tux/Java; (Keine Anführungszeichen, Doppelpunkt statt Semikolon als Trenner).

Daher habe ich verschiedenes durchprobiert:
$ javac -classpath '/home/tux/Java/javakara.jar:/home/tux/Java;' /home/tux/Java/FindeBaum.java ⇒ incorrect classpath: /home/tux/Java;
$ javac -classpath "/home/tux/Java/javakara.jar:/home/tux/Java;" /home/tux/Java/FindeBaum.java ⇒ incorrect classpath: /home/tux/Java;
$ javac -classpath /home/tux/Java/javakara.jar:/home/tux/Java /home/tux/Java/FindeBaum.java ⇒ Keine Fehlermeldung
$ javac -classpath /home/tux/Java/javakara.jar:/home/tux/Java; /home/tux/Java/FindeBaum.java ⇒ Die Bash interpretiert es durch das Semikolon als zwei Befehle, effektiv passiert also gar nichts.

"which java" zeigt auf /usb/bin/java, die Version ist von Sun. Interessanter ist aber vielleicht

   $ which javac
/usr/bin/javac

   $ javac
Eclipse Java Compiler v_774_R33x, 3.3.1
Copyright IBM Corp 2000, 2007. All rights reserved.

💡 EDIT: Das ist sogar sehr interessant. /usr/bin/javac zeigt nämlich auf /etc/alternatives/javac, das wiederum auf /usr/lib/jvm/java-gcj/bin/javac zeigt.
Das war als des Rätsels Lösung: Da Ubuntu automatisch gjc statt sun-java installiert, wird das auch beim JDK so gemacht. (Wobei mir eigentlich unverständlich ist, dass gjc trotz aller Inkompatibilitäten immer noch Standard ist, obwohl Java 6 formal eigentlich schon open source ist.)
Daher habe ich es mal mit

sudo update-alternatives --configure javac

probiert - und siehe da: Alles funktioniert!

Wie ich jetzt gerade gesehen habe, steht es auch in Java ganz unten kurz erwähnt. Da aber im Gegensatz zu java für javac kein Code angegeben ist, habe ich das wohl ganz übersehen ...

Vielen Dank an euch beide, ohne eure Tipps wäre ich der wahren Ursache wohl nicht auf die Schliche gekommen!

Kagee_6

Avatar von Kagee_6

Anmeldungsdatum:
17. April 2009

Beiträge: 126

Ich auch das Problem mit javakara

Executed: javac -classpath /opt/min/javakara.jar:/home/stefan; /home/stefan/FindeBaum.java

im Prinzip ist es die selbe Zeile sieht (andere Pfade). aber

sudo update-alternatives --config javac

hat nicht gefunzt.

sudo update-alternatives --config javac
Es gibt nur eine Alternative in Link-Gruppe javac: /usr/lib/jvm/java-6-openjdk/bin/javac
Nichts zu konfigurieren.

bitte um Hilfe Kagee6

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17608

Wohnort: Berlin

Sich an einen ein Jahr alten Thread anzuhängen ist keine so gute Idee. Sollen wir jetzt das alles nochmal von vorne durchlesen?

Lieber einen neuen Thread erzeugen, und einen Link auf den alten setzen, wenn da wirklich hilfreiches drin steht.

Du heißt auch Stefan?

FriedChicken

(Themenstarter)

Anmeldungsdatum:
10. Juni 2006

Beiträge: 1751

Wohnort: Deizisau

@Kagee6:

Du hast sun-java gar nicht installiert. Deshalb kannst du es auch nicht auswählen 😉

Antworten |