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

Problem beim Finden von der jmf.jar - gelöst-

Hallo Leute

Ich weiß zwar, dass es schon einige Threads zu dem Thema gibt, aber keiner davon und auch nicht google hat mir weiterhelfen können.
Also:

SUSE LINUX 10.0
JAVA:
Code:
damdp@linux:~> java -version
java version "1.5.0_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_03-b07)
Java HotSpot(TM) Client VM (build 1.5.0_03-b07, mixed mode, sharing)

JMF: Version 2.1.1a

Ich benutze die Bash.

Meine profile.local:
Code:
# Wir nehmen einfach mal an, Java, JMF und das TTT sind in /usr/local installiert.
# Das kann natürlich auch stattdessen irgendwo anders (z.B. in eurem Home-Verzeichnis) sein,
# dann müsstet ihr die Pfade entsprechend anpassen
export JMFHOME=/home/damdp/Daten2/exchange/ttt-environment/jmf-2.1.1a
export JRE_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0_03/jre
export TTT_HOME=/home/damdp/Daten2/exchange/ttt-environment/ttt-20041022

# Zuerst wird der CLASSPATH gesetzt, damit Java weiß, wo die Bibliotheken sind
if [ -n $CLASSPATH ] ; then
        export CLASSPATH=$CLASSPATH:$JMFHOME/lib/ext/jmf.jar:$JMFHOME/lib/ext/mediaplayer.jar:\
                  $JMFHOME/lib/ext/multiplayer.jar:$TTT_HOME/ttt.jar
else
        export CLASSPATH=$JMFHOME/lib/ext/jmf.jar:$JMFHOME/lib/ext/mediaplayer.jar:\
                         $JMFHOME/lib/ext/multiplayer.jar:$TTT_HOME/ttt.jar
fi

# Und auch die anderen Bibliotheken (fürs ganze Betriebssystem)
# sollten bekannt gemacht werden.
if [ -n $LD_LIBRARY_PATH ] ; then
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JMFHOME/lib/i386:$JRE_HOME/lib/i386:\
             $JRE_HOME/lib/i386/native_threads:$JRE_HOME/lib/i386/server:$JRE_HOME/lib/i386/client
else
    export LD_LIBRARY_PATH=$JMFHOME/lib/i386:$JRE_HOME/lib/i386:$JRE_HOME/lib/i386/native_threads:\
           $JRE_HOME/lib/i386/server:$JRE_HOME/lib/i386/client
fi
Die Pfade stimmen sicher, hab das ca.100Mal kontrolliert:-(

Die .profile im home Verzeichnis ist leer

Code:
damdp@linux:~> echo $CLASSPATH
:/home/damdp/Daten2/exchange/ttt-environment/jmf-2.1.1a/lib/ext/jmf.jar:/home/damdp/Daten2/exchange/ttt-environment/jmf-2.1.1a/lib/ext/mediaplayer.jar:
:/home/damdp/Daten2/exchange/ttt-environment/jmf-2.1.1a/lib/ext/jmf.jar:/home/damdp/Daten2/exchange/ttt-environment/jmf-2.1.1a/lib/ext/mediaplayer.jar:
damdp@linux:~>

#Zwar alles doppelt, darf aber doch normal nichts ausmachen??

Code:
damdp@linux:~> echo $LD_LIBRARY_PATH
:/home/damdp/Daten2/exchange/ttt-environment/jmf-2.1.1a/lib/i386:/usr/lib/jvm/java-1.5.0-sun-1.5.0_03/jre/lib/i386:
:/home/damdp/Daten2/exchange/ttt-environment/jmf-2.1.1a/lib/i386:/usr/lib/jvm/java-1.5.0-sun-1.5.0_03/jre/lib/i386:
damdp@linux:~>

#Same here

Code:
damdp@linux:~/Daten2/exchange/ttt-environment/ttt-20041022> java -jar ttt.jar
Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/Format
        at ttt.TTT.<clinit>(TTT.java:711)

Die Klasse javax/media/Format befindet sich im jmf.jar

Warum kann ich hier nicht auf die Klasse javax/media/Format zugreifen??
Danke, Gruß, Tom
 
das kann so nicht gehen :)

java -jar xxx.jar
==> es wird nur das aktuelle Verzeichnis mit einbezogen in der Suche

probiere mal:
Code:
java -cp <liste-der-jars-durch-:-getennt>:ttt.jar <name-der-main-class-aus-ttt.jar>
 
Danke für die schnelle Antwort.

Aber:
Code:
damdp@linux:~/Daten2/exchange/ttt-environment/ttt-20041022> java -cp <JMFHOME/lib/ext/jmf.jar:JMFHOME/lib/ext/mediaplayer.jar:JMFHOME/lib/ext/multiplayer.jar:TTT_HOME/ttt.jar>:ttt.jar <TTT>
bash: syntax error near unexpected token `newline'
damdp@linux:~/Daten2/exchange/ttt-environment/ttt-20041022> java -cp <JMFHOME/lib/ext/jmf.jar:JMFHOME/lib/ext/mediaplayer.jar:JMFHOME/lib/ext/multiplayer.jar:TTT_HOME/ttt.jar>:ttt.jar <TTT.class>
bash: syntax error near unexpected token `newline'

Dachte mit dem CLASSPATH und LD_LIBRARY_PATH setzen erspart man sich die Angabe vor jedem starten des Programms
Und:
Das Diagnose Programm von Sun spuckt folgendes aus:
Code:
JMF DIAGNOSTICS:

JAVA1.1 COMPILANT BROWSER MAYBE...
JMF CLASSES NOT FOUND.
 
ohne die "<" ">", die waren nur zur Verdeutlichung !

ansonsten schau dir das hier an:
http://www.jpackage.org/rpm.php?id=2760

jpackage Pakete sind SuSE-konform und können verwendet werden.
da jmf eine spezielle Lizenz hat musst du dir das RPM selber bauen. Wie das geht steht hier:
http://www.jpackage.org/rebuilding.php

und damit hast du einige Probleme weniger, wil es die jmf-Extensions an die richtige Stelle installiert :)
 
Hmpf, mein Fehler

Die Klasse, die main enthält ist übrigens auch in einem jar Archiv (ttt.jar)
Deswegen benutze ich immer den -jar Parameter, da sonst
Code:
java.lang.NoClassDefFoundError: TTT
kommt

damdp@linux:~/Daten2/exchange/ttt-environment/ttt-20041022> java -cp JMFHOME/lib/ext/jmf.jar:JMFHOME/lib/ext/mediaplayer.jar:JMFHOME/lib/ext/multiplayer.jar:TTT_HOME/ttt.jar:ttt.jar -jar ttt.jar
Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/Format
at ttt.TTT.<clinit>(TTT.java:711)
 
du solltest dich mal einlesen was -jar bedeutet :)
==> DAS SOLLST DU WEGLASSEN ! steht nicht in meinem sample drin ;)

ansonsten befolge meinen Rat im letzen Posting! nutze jpackage

zur Info:
http://mindprod.com/jgloss/classpath.html
If you use the -jar option, java.exe ignores the classpath. It will only look in that jar. Try using the manifest Class-Path instead. ..
 
Hmmm:
Code:
damdp@linux:~/Daten2/exchange/ttt-environment/ttt-20041022> java -cp JMFHOME/lib/ext/jmf.jar:JMFHOME/lib/ext/mediaplayer.jar:JMFHOME/lib/ext/multiplayer.jar:TTT_HOME/ttt.jar:ttt.jar ttt/TTT
Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/Format
        at ttt.TTT.<clinit>(TTT.java:711)

Ab dem jmf2.1.1e ist dich der Mp3Codec aus lizenzrechtlichen Gründen nicht mehr drin:-(
Deswegen hänge ich so am 2.1.1a
Gruß!
 
was ist JMFHOME, TTTHOME ?
eine geetzte Umgebungsvariable ?
wenn ja ==> du musst $JMFHOME bzw $TTTHOME in deiner Classpathangabe schreiben
 
WUNDERBAR,
kann das Programm jetzt starten, das ist schon mal toll:)
Hast du vielleicht noch eine Idee, an was es liegen könnte, dass die benötigten jar Archive nicht beim einloggen über die profile.local geladen werden, so dass ich nicht jedes mal das -cp JMFHOME... u.s.w. hinschreiben muss?

Danke auf jeden Fall,
Gruß, Tom
 
damdp schrieb:
WUNDERBAR,
kann das Programm jetzt starten, das ist schon mal toll:)
Hast du vielleicht noch eine Idee, an was es liegen könnte, dass die benötigten jar Archive nicht beim einloggen über die profile.local geladen werden, so dass ich nicht jedes mal das -cp JMFHOME... u.s.w. hinschreiben muss?

Danke auf jeden Fall,
Gruß, Tom

eigentlich nutzt man für sowas die jpackage-utils.
Hier ein Beispiel:
Code:
#!/bin/bash
#
# startscript for TuxGuitar
# http://www.herac.com.ar/tuxguitar.html
#
# Changelog:
# 08.04.2006 initial version (0.5)
# 28.05.2006 added itext.jar to classpath (0.6)
# 28.05.2006 added set_flags "-Xms128m -Xmx128m" (0.6)

# activate for debugging
#set -x

# base settings
echo ""
echo "configure java-environment ..."

VERBOSE=1

# source the jpackage helpers
. /usr/share/java-utils/java-functions

# set JAVA_* environment variables
set_javacmd
check_java_env
set_jvm_dirs

# set classpath
echo "configuring TuxGuitar ..."
CLASSPATH=`build-classpath TuxGuitar swt-gtk itext`
# set jar-entry-class
MAIN_CLASS="org.herac.tuxguitar.gui.TuxGuitar"
# path for neede shared libraries
set_options "-Djava.library.path="/usr/lib/eclipse""
set_flags "-Xms128m -Xmx128m"

# start application
echo "starting TuxGuitar application ..."
run $@

mit der build-in-funktion build-classpath gibt man nur die Namen der jar-files an, set_options dient unter anderm zur Angabe dessen was du in LD_LIBRARY_PATH drin hast
 
Vielen Dank

Hab jetzt schon fast alles so hingekriegt.
Hab nur noch ein kleines Problem mit dem Video

java.lang.UnsatisfiedLinkError: getWindowHandle

aber da spiele ich jetzt erst mal selber ein bisschen rum und falls ich nicht fraufkomme melde ich mich wieder;-)

Gruß, Tom
 
damdp schrieb:
java.lang.UnsatisfiedLinkError: getWindowHandle

das ist ein Hinweis auf eine fehlende native library ..

also bei -Djava.library.path=... da fehlt ein Pfad,
bzw in deiner LD_LIBRARY_PATH Definition fehlt ein Pfad.

oder

diese Bibliothek ist nicht vorhanden auf deinem System ...
 
Hallo Oc2pus!

Mein Startscript:
Code:
LD_LIBRARY_PATH=$JMFHOME/lib/i386:$JMFHOME/bin/i386/native_threads:$JRE_HOME/lib/i386:
$JRE_HOME/lib/i386/client:$JRE_HOME/lib/i386/native_threads:$JRE_HOME/lib/i386/server
LD_PRELOAD=JRE_HOME/lib/i386/libjawt.so

CLASSPATH=$JMFHOME/lib/ext/jmf.jar:$JMFHOME/lib/ext/mediaplayer.jar:$JMFHOME/lib/ext/multiplayer.jar:
$JMFHOME/lib/ext/sound.jar:$TTT_HOME/ttt.jar:ttt.jar

java ttt/TTT

Dein Beispiel geändert:
Code:
VERBOSE=1

# source the jpackage helpers
. /usr/share/java-utils/java-functions

# set JAVA_* environment variables
set_javacmd
check_java_env
set_jvm_dirs

# set classpath
CLASSPATH=$JMFHOME/lib/ext/jmf.jar:$JMFHOME/lib/ext/mediaplayer.jar:$JMFHOME/lib/ext/multiplayer.jar:$JMFHOME/lib/ext/sound.jar:$TTT_HOME/ttt.jar:ttt.jar
# set jar-entry-class

set_options "-Djava.library.path="$JMFHOME/lib/i386:$JMFHOME/bin/i386/native_threads:$JRE_HOME/lib/i386:$JRE_HOME/lib/i386/client:$JRE_HOME/lib/i386/native_threads:$JRE_HOME/lib/i386/server""

# start application
run ttt/TTT

Also das Programm startet und läuft jetzt mit Sound aber noch ohne Video.
Im Hintergrund in der Shell wird bei beiden Startscripts der selbe Fehler angezeigt:
Code:
Exception in thread "Loop thread: com.sun.media.renderer.video.XLibRenderer@21b220" java.lang.UnsatisfiedLinkError: getWindowHandle
        at com.sun.media.DrawingSurfaceJAWT.getWindowHandle(Native Method)
        at com.sun.media.util.WindowUtil.getWindowHandle(Native Method)
        at com.sun.media.util.WindowUtil.getWindowHandle(WindowUtil.java:61)
        at com.sun.media.renderer.video.XLibRenderer.doProcess(XLibRenderer.java:214)
        at com.sun.media.renderer.video.XLibRenderer.doProcess(XLibRenderer.java:189)
        at com.sun.media.renderer.video.BasicVideoRenderer.process(BasicVideoRenderer.java:126)
        at com.sun.media.BasicRendererModule.processBuffer(BasicRendererModule.java:735)
        at com.sun.media.BasicRendererModule.scheduleBuffer(BasicRendererModule.java:612)
        at com.sun.media.BasicRendererModule.doProcess(BasicRendererModule.java:408)
        at com.sun.media.RenderThread.process(BasicRendererModule.java:1122)
        at com.sun.media.util.LoopThread.run(LoopThread.java:143)

Die Klassen die im Fehler vorkommen sind alle in der jmf.jar und bei beiden Startscripts in der LD_LIBRARY vorhanden:-/

Gruß, Tom
 
ist denn JMFHOME gesetzt ? und sind wirklich alle native-Libraries vie -Djava.library.path erreichbar ?

wenn du weisst, in welcher Bibliothek die Funtktion getWindowHandle enthalten ist, kannst du mit "ldd dieseBibliothek.so" feststellen von wo noch Bibliotheken angezogen werden, diese dann auch in den library.path aufnehemen.

das solltest du sehen können im jpackage-Fall, da dort alle Variablen ausgewertet und angezeigt werden..

noch ein Tip:
nutze das script build-classpath (steht in /usr/bin) um deinen Classpath erzeugen zu lassen:
build-classpath jar1 jar2 jar3 ...
build-classpath directory ==> alle jars in dem Verzeichnis werden ordentlich aufgelistet
:)

man kann das dann so nutzen:
myClassPath=`build-classpath $JMFHOME $TTTHOME`

allerdings sollten dann die TTTHOME-jars in /usr/share/java oder /usr/share/java/TTTHOME stehen.
 
Oben