• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

kann java Programm "jperf-2.0.0.jar" nicht starten

Hallo,

Java ist in Version 1.6.0_07 installiert.
Code:
4850e:/home/opensuxiser/jperf-200 # java -version
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode)

Zip Archiv "jperf-2.0.0.zip" entpackt und ins Verzeichnis gewechselt.
Dann wollte ich mit "java -jar jperf-2.0.0.jar das Programm starten. Geht nicht.

Code:
drwxr-xr-x 2 opensuxiser users  4096 19. Mär 16:46 bin
-rw-r--r-- 1 opensuxiser users 61476 19. Mär 16:58 jperf-2.0.0.jar
-rw-r--r-- 1 opensuxiser users   160 19. Mär 16:44 jperf.bat
-rw-r--r-- 1 opensuxiser users   159 19. Mär 16:44 jperf.sh
drwxr-xr-x 2 opensuxiser users  4096 19. Mär 16:48 lib

Ich erhalte folgende Fehlermeldung.

Code:
4850e:/home/opensuxiser/jperf-200 # java -jar jperf-2.0.0.jar
Failed to load Main-Class manifest attribute from jperf-2.0.0.jar

Was ist hier los? Wer kann helfen? In der Konsole bin ich als Root angemeldet.
 

abgdf

Guru
ftp://ftp.t50.ru/in/jperf-2.0.0/jperf.sh

sagt
Code:
java -classpath jperf-2.0.0.jar:lib/forms-1.1.0.jar:lib/jcommon-1.0.10.jar:lib/jfreechart-1.0.6.jar:lib/swingx-2008_02_03.jar net.nlanr.jperf.JPerf
Gruß
 
OP
O

OpenSuxiser

Newbie
Hallo,

geht funktioniert so noch nicht.

Muß ich ins Verzeichnis /bin/sh wechseln? In /sh komme ich nämlich nicht. Das ist bei mir eine Verknüpfung und kein Verzeichnis.
Wenn ich den obigen Befehl in meinem Homeverzeichnis oder in /bin eingebe, dann erscheint immer das hier:

Code:
4850e:/> java -classpath jperf-2.0.0.jar:lib/forms-1.1.0.jar:lib/jcommon-1.0.10.jar:lib/jfreechart-1.0.6.jar:lib/swingx-2008_02_03.jar net.nlanr.jperf.JPerf
Exception in thread "main" java.lang.NoClassDefFoundError: net/nlanr/jperf/JPerf
Caused by: java.lang.ClassNotFoundException: net.nlanr.jperf.JPerf
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
4850e:/>

Wenn ich dann versuche die jperf-2.0.0.jar zu starten erhalte ich wieder diese Fehlermeldung:

Code:
4850e:~/jperf-200> java -jar jperf-2.0.0.jar
Failed to load Main-Class manifest attribute from jperf-2.0.0.jar

hmm - Moment
Dann habe ich den langen Befehl als Root nochmal eingeben, dann startete jperf. Warum denn das? :???:
Wie kann ich jperf auch ohne Root Rechte starten?
 

Wizzzard

Member
OpenSuxiser schrieb:
Code:
4850e:/> java -classpath jperf-2.0.0.jar:lib/forms-1.1.0.jar:lib/jcommon-1.0.10.jar:lib/jfreechart-1.0.6.jar:lib/swingx-2008_02_03.jar net.nlanr.jperf.JPerf

Wenn ich dann versuche die jperf-2.0.0.jar zu starten erhalte ich wieder diese Fehlermeldung:

Code:
4850e:~/jperf-200> java -jar jperf-2.0.0.jar
Failed to load Main-Class manifest attribute from jperf-2.0.0.jar

Der zweite Aufruf ist totaler Quatsch. Das Jar ist nicht dafür vorgesehen, mit java -jar aufgerufen zu werden. Der 1. Aufruf ist im Prinzip richtig, aber die Angabe des Klassenpfades ist relativ. Das bedeutet, beim Aufruf musst Du Dich genau an der Stelle im Dateisystem befinden, von der aus das java die Jars im Klassenpfad genau so sehen kann.

Das bedeutet jperf-2.0.0.jar ist im aktuellen Arbeitszverzeichnis und alle anderen Jars sind im lib-Verzeichnis dadrunter.

Außerdem kann man bei java -jar den Schalter -cp nicht verwenden

Dann liegt im entpackten Verzeichnis ein
Code:
jperf.sh
. Damit solltest Du jperf auch Aufrufen können.
 
OP
O

OpenSuxiser

Newbie
Hallo,

ich verstehe ehrlich gesagt nichts.
Andere Java Programme rufe ich auch mit "java .jar ..." auf und sie funktionieren. Ohne Root-Rechte. Warum soll das falsch sein?

Und kannst Du mir sagen wo ich hin muß für die lange Befehlskette, damit Java die Jars im Klassenpfad sehen kann?
Und warum funktioniert die lange Befehlskette mit Root-Rechten?
Eine Datei namens jperf.sh ist vorhanden. Geht aber noch nicht.
 

Wizzzard

Member
OpenSuxiser schrieb:
Hallo,

ich verstehe ehrlich gesagt nichts.
Andere Java Programme rufe ich auch mit "java .jar ..." auf und sie funktionieren. Ohne Root-Rechte. Warum soll das falsch sein?

Das hat nichts mit Root-Rechten zu tun. Die Fehlermeldung beim Aufruf mit java -jar besagt, dass in der Jar-Datei nicht drin steht, welche Klasse die main-Methode enthält. Also weiß java nicht was es mit dem Jar machen soll. Es gibt sozusagen ausführbare Jars und Jars, die nicht ausführbar sind und nur reine Programmbibliotheken sind.

OpenSuxiser schrieb:
Und kannst Du mir sagen wo ich hin muß für die lange Befehlskette, damit Java die Jars im Klassenpfad sehen kann?
Und warum funktioniert die lange Befehlskette mit Root-Rechten?
Eine Datei namens jperf.sh ist vorhanden. Geht aber noch nicht.

Du musst in das Verzeichnis, in der die jperf-2.0.0.jar steht. Oder gib beim -cp den absoluten Pfad zu den Jars ein. Wenn Du nicht weißt, was ich mit relativem und absoluten Pfad meine, siehe unten.

Das Skript jperf.sh ausführbar machen. (Hint: chmod). Oder aufrufen mit
Code:
bash ./jperf.sh

Besorge Dir ein Buch zur Einführung in Java und ein Buch zur Arbeit mit der Kommandozeile!

Zu letzterem gibt es gerade den Thread
http://www.linux-club.de/viewtopic.php?f=21&t=97174&start=0&st=0&sk=t&sd=a
 
OP
O

OpenSuxiser

Newbie
Hallo,

also nochmal.

okay, ich hatte beim rumprobieren etwas verwechselt.
Es ist egal ob ich mit Root-Rechten oder ohne den langen Befehl eingebe.
Code:
java -classpath jperf-2.0.0.jar:lib/forms-1.1.0.jar:lib/jcommon-1.0.10.jar:lib/jfreechart-1.0.6.jar:lib/swingx-2008_02_03.jar net.nlanr.jperf.JPerf
Ich muß mich nur in dem jperf-200 genannten Verzeichnis befinden.
Wenn ich in einem anderen Verzeichnis bin, dann hilft allerdings auch die absolut Pfadangabe nichts.
Das finde ich nun wiederum sehr seltsam. Wofür braucht es dann die absolute Pfadangabe? ( /home/opensuxiser/jperf-200/jperf-2.0.0.jar )

Ansonsten, auch mit absoluter Pfadangabe, erhalte ich dann wieder diese Fehlermeldung.
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: net/nlanr/jperf/JPerf
Caused by: java.lang.ClassNotFoundException: net.nlanr.jperf.JPerf
   at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

Ist das jetzt ein Fehler von dem jperf Programm? Ein anderes Java Programm funktioniert nämlich ohne jedes Problem. Das rufe ich mit "java -jar" auf.

bash ./jperf.sh funktioniert ohne Probleme. Was meinst Du mit ausführbar machen?
 

Wizzzard

Member
OP
O

OpenSuxiser

Newbie
Hallo,

okay, soweit erstmal verstanden. Ich werde mal lesen. Nur will ich kein Java Programmierer werden nur um ein Problem zu verstehen.

Nur eins verstehe ich nicht. Muß man immer gleich ganze Bücher lesen wenn man ein Problem hat? :???:
Versteht mich aber nicht falsch. Ich bin nicht zu faul zum lesen.
Im Fall von Samba habe ich bestimmt schon das halbe Internet ausgelesen und trotzdem gibt es keine goldene Lösung für mich um auf höhere und vor allen stabile Datenraten zwischen Linux und WinXP zu kommen. Laut G. Schnurer von der c't liegt das allein an den Samba Einstellungen.

Weiter im Text. Ich dachte ein Forum dient zur Problemlösung? Klare Frage - klare Antwort.
Wenn man gar nicht klar kommt, dann greift man von selbst zum Buch.
In dem Fall hier hatte ich gedacht würden paar Sätze genügen und der Fall ist abgeschlossen und jeder andere mit dem gleichen Problem liest hier nach und weis auch Bescheid.
Mir kommt es vor als wenn jeder bei einem größeren Problem gleich auf Bücher verweist.
Dann braucht man auch kein Forum. Meine jetzige Meinung.
Dann können die Moderatoren gleich Linklisten erstellen vom Problem auf irgendeine Online-Buchseite.
Das andere Problem ist, dass manche Bücher einfach veraltet sind.
Im Fall vom Suse Samba Buch. Darin wird höchstens WinNT erwähnt. Win2k oder gar WinXP gibts gar nicht.
 

Wizzzard

Member
Du scheinst halt nicht viel zu wissen, z.B. scheinst Du überhaupt nicht zu wissen, wie man Pfade setzt. Eine CLASSPATH-Angabe funktioniert nunmal ähnlich zu einem PATH in der Shell.

Die letzte Fehlermeldung besagte, dass die angegebene Klasse auf der Kommandozeile nicht im Klassenpfad ist. Daraus folgt: Irgendwas hinter dem Schalter -cp ist falsch. Mit dem Wissen, wie Pfade aufgebaut sein müssen, also man weiß, warum Pfadangaben absolut sein müssen, sollte man das Problem selber lösen können.

Dann reitest Du darauf rum "Aber mit java -jar ging das doch immer!" Ich hatte Dir schon in der ersten Antwort geschrieben, warum das nicht geht. Das erinnert mich an ein kleines Kind das mit den Füssen aufstampft, weil ihm etwas nicht passt. Das ist nicht zielführend.

Dann scheinst Du auch keine Ahnung davon zu haben, was "Ausführbar" bei einer Datei bedeutet. Das sollte man schon wissen, was das bedeutet, und wie man das ändert. Da hast du wohl den Hinweis auf 'chmod' überlesen. Aber wenn ich Dir den ganzen Befehl erklären muss, ist mir das zuviel. Schon mal was von man-Pages gehört?

Über den Konqueror kann man über Eigenschaften aber auch das Ausführbar-Flag setzen.
 
OP
O

OpenSuxiser

Newbie
Hallo,

wie kommst Du darauf das ich nicht weis wie man Pfade angibt? Habe ich doch alles hingeschrieben und ich weis das die Pfadangabe stimmt.

Wenn Du mir aber so von oben herab kommst und den Oberlehrer spielst, der "seine Kinder" erstmal als dumm hinstellt, dann kann ich auf Deine Hilfe auch verzichten.

Der Thread ist für mich jedenfalls beendet.
 

Wizzzard

Member
OpenSuxiser schrieb:
wie kommst Du darauf das ich nicht weis wie man Pfade angibt? Habe ich doch alles hingeschrieben und ich weis das die Pfadangabe stimmt.

Wenn der stimmen würde, dann träte die ClassNotFoundException nicht auf.

EOT.
 

Wizzzard

Member
Damit gehts!
Code:
#!/bin/sh

JPERF_HOME="${HOME}/programme/jperf"

CP="$JPERF_HOME/jperf2.0.0.jar"
CP="$CP:$JPERF_HOME/lib/forms-1.1.0.jar"
CP="$CP:$JPERF_HOME/lib/jcommon-1.0.10.jar"
CP="$CP:$JPERF_HOME/lib/jfreechart-1.0.6.jar"
CP="$CP:$JPERF_HOME/lib/swingx-2008_02_03.jar"

exec java -classpath $CP net.nlanr.jperf.JPerf

Abspeichern in einem Verzeichnis das sich im Pfad befindet, z. B. als jperf.sh

Die Umgebungsvariable JPERF_HOME anpassen.

chmod 755 jperf.sh

Jetzt ist das von überall aufrufbar.

 
OP
O

OpenSuxiser

Newbie
Hallo,

ich nochmal. Ich werde es testen sobald ich wieder dafür Zeit habe.
Erstmal investiere ich viel Zeit für die tausenden Samba Einstellungen.
Ich möchte "nur" eine höhere aktzeptable Datenrate die auch stabil ist.
Das hat für mich erstmal oberste Prio. Zur Zeit ist dafür eine andere Distribution installiert.

Ich danke Dir erstmal an dieser Stelle für Deine Hilfe. Alles andere wird sich dann zeigen.

Danke!
 
Oben