Supportnet / Forum / Anwendungen(Java,C++...)
Java ClassPath? Mit Eclipse?
Frage
Hallo!
Habe ein Java Programm mit mehrern Klassen in einer Package geschrieben, welches die CommAPI benutzt. Unter Eclipse funktioniert das wunderbar, auf der Eingabeaufforderung kommt allerdings folgende Meldung:
Exception in thread "main" java.lang.NoClassDefFoundError: ComServer (w
: ComServer/ComServer)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Muss die API auf jeder Maschine drauf sein, wo ich das Programm laufen lassen möchte?
Danke schonmal,
Michael
Antwort 1 von disco
moin
das ist das Problem, wenn die Entwicklungsumgebung die Hälfte der Arbeit übernimmt. Wenn du deine Klassen auch ausserhalb davon betreiben willst, musste den CP beim Programmaufruf mit angeben (von jeder einzelnen Bibliothek). Oder du packst alle notwendigen Bibs und deine Klassen in ein JAR-File.
Gibt da massig zu im Netz, wo du dich ertmal informieren kannst. Frag bei konkreten Problemen ruhig nochmal nach.
g,
disco
das ist das Problem, wenn die Entwicklungsumgebung die Hälfte der Arbeit übernimmt. Wenn du deine Klassen auch ausserhalb davon betreiben willst, musste den CP beim Programmaufruf mit angeben (von jeder einzelnen Bibliothek). Oder du packst alle notwendigen Bibs und deine Klassen in ein JAR-File.
Gibt da massig zu im Netz, wo du dich ertmal informieren kannst. Frag bei konkreten Problemen ruhig nochmal nach.
g,
disco
Antwort 2 von pheeos
Alles klar, danke!
Noch eine Frage: Ich nutze die funktion string.replace(str,str) für zeichenketten.. ausführen unter eclipse mit 1.5.0 JRE geht. Wenn ich es versuche zu kompilieren bekomm ich entsprechend meldungen, dass ich nur chars ersetzen kann..
fragen über fragen.. .-)
Vielen Dank,
michael
Noch eine Frage: Ich nutze die funktion string.replace(str,str) für zeichenketten.. ausführen unter eclipse mit 1.5.0 JRE geht. Wenn ich es versuche zu kompilieren bekomm ich entsprechend meldungen, dass ich nur chars ersetzen kann..
fragen über fragen.. .-)
Vielen Dank,
michael
Antwort 3 von disco
laut api braucht das auch ne CharSequence.:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html
probier mal
replaceAll(String, String);
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html
probier mal
replaceAll(String, String);
Antwort 4 von pheeos
Hi Disco,
das 2.Problem hat sich erledigt.. aber ich bekomme immernoch nicht meine klassen an der eingabeaufforderung ans rennen, nur in der IDE..
angenommen ich hab meine klassen in c:\classes und meine commapi ist c:\java\lib\comm.jar, wie muss der classpath aussehen?
vielen dank,
michael
das 2.Problem hat sich erledigt.. aber ich bekomme immernoch nicht meine klassen an der eingabeaufforderung ans rennen, nur in der IDE..
angenommen ich hab meine klassen in c:\classes und meine commapi ist c:\java\lib\comm.jar, wie muss der classpath aussehen?
vielen dank,
michael
Antwort 5 von disco
als du befindest dich in
c:\classes
dann musste sagen
java -classpath .;c:\java\lib\comm.jar DeineKlasse
beim compilieren musste das auch machen.
g,
disco
c:\classes
dann musste sagen
java -classpath .;c:\java\lib\comm.jar DeineKlasse
beim compilieren musste das auch machen.
g,
disco
Antwort 6 von pheeos
Alles klar,
wenn ich die API mit kompiliere, muss diese dann auch auf jedem Rechner vorhanden sein wo ich mein prog laufen lasse?
ziel ist eigentlich das ganze in eine jar zu bekommen.. aber irgendwie läuft das net..
wenn ich die API mit kompiliere, muss diese dann auch auf jedem Rechner vorhanden sein wo ich mein prog laufen lasse?
ziel ist eigentlich das ganze in eine jar zu bekommen.. aber irgendwie läuft das net..
Antwort 7 von disco
da musste mal googeln, das ist zig mal beschrieben.
werd dir nur ca. sagen, wie du "per hand" vorgehen musst. gibt bestimmt auch plugins für eclipse.
du nimmst einen ordner und packst da deine programmierten classes rein. ausserdem entpackst du alle fremden und notwendigen JARS ind das gleiche verzeichnis. informier dich übers manifest und pack das entsprechend rein. dann packst du den gesamten ordner mit einem zip programm. aber statt der endung zip vergibst du JAR.
werd dir nur ca. sagen, wie du "per hand" vorgehen musst. gibt bestimmt auch plugins für eclipse.
du nimmst einen ordner und packst da deine programmierten classes rein. ausserdem entpackst du alle fremden und notwendigen JARS ind das gleiche verzeichnis. informier dich übers manifest und pack das entsprechend rein. dann packst du den gesamten ordner mit einem zip programm. aber statt der endung zip vergibst du JAR.
Antwort 8 von pheeos
So, ein bissl klappt nun! :-)
wenn ich die Dateien NICHT in ein jar packe und per folgender batch starte, gehts:
set CLASSPATH=.;c:\programme\java\jre1.5.0_04\lib\comm.jar
java ComServer.ComServer
So nun habe ich versucht per jar ein jar zu erstellen:
jar cvfm ComServer.jar manifest.mf ComServer
das manifest sieht so aus:
Manifest-Version: 1.0
CLASS-PATH: .
MAIN-CLASS: ComServer.ComServer
Beim Aufruf mit java -jar ComServer.jar kommt folgendes:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/comm/Unsupport
dCommOperationException
at ComServer.ComServer.main(ComServer.java:21)
haste da noch ne idee? muss ich im manifest noch nen path setzen?
vielen dank,
michael
wenn ich die Dateien NICHT in ein jar packe und per folgender batch starte, gehts:
set CLASSPATH=.;c:\programme\java\jre1.5.0_04\lib\comm.jar
java ComServer.ComServer
So nun habe ich versucht per jar ein jar zu erstellen:
jar cvfm ComServer.jar manifest.mf ComServer
das manifest sieht so aus:
Manifest-Version: 1.0
CLASS-PATH: .
MAIN-CLASS: ComServer.ComServer
Beim Aufruf mit java -jar ComServer.jar kommt folgendes:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/comm/Unsupport
dCommOperationException
at ComServer.ComServer.main(ComServer.java:21)
haste da noch ne idee? muss ich im manifest noch nen path setzen?
vielen dank,
michael