2010-12-20 11 views
0

Ich habe eine Anwendung, die JNA verwenden und Audio und Video bekommt. Es funktioniert in meiner Linux-Box. Aber wenn ich es in Windows teste. Es funktioniert einfach nie. Weil ich noch lerne, werde ich Ihren Vorschlag schätzen, wie man es repariert, ich verbrachte bereits einige Tage und Wochen, um es nur auszuarbeiten, aber bekommen Sie einfach nicht, warum JAVA einfach nicht arbeitet, es ist eine Kreuzplattform. Warum sollte es erneut Systempfad oder etc-Konfiguration erfordern.Wie löst man dieses JNA-Problem?

Ich bin jetzt total verloren, warum es in Linux funktioniert und es funktioniert nicht in Windows XP? Wie kann ich es dann laufen?

Inside the lib direcotry i have my JNA and Audio libraries. 
C:\Documents and Settings\test\Desktop\test>dir 
Volume in drive C has no label. 
Volume Serial Number is 680F-0963 

Directory of C:\Documents and Settings\test\Desktop\test 

19/12/2010 22:09 <DIR>   . 
19/12/2010 22:09 <DIR>   .. 
19/12/2010 22:09   51.791 Audio.jar 
19/12/2010 22:09 <DIR>   lib 
       1 File(s)   51.791 bytes 
       3 Dir(s)  487.002.112 bytes free 



Now trying to run Audio.jar, gets Fail 1: 

C:\Documents and Settings\test\Desktop\test>java -Djava.library.path=~/jni -jar 
Audio.jar 
Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load librar 
y gstreamer-0.10 
     at org.gstreamer.lowlevel.GNative.loadWin32Library(GNative.java:83) 
     at org.gstreamer.lowlevel.GNative.loadLibrary(GNative.java:43) 
     at org.gstreamer.lowlevel.GstNative.load(GstNative.java:42) 
     at org.gstreamer.lowlevel.GstNative.load(GstNative.java:39) 
     at org.gstreamer.Gst.<clinit>(Gst.java:59) 
     at video.MyVideo.simpletest(MyVideo.java:31) 
     at sipphone.MainApplet.run(MainApplet.java:58) 
     at sipphone.MainApplet.main(MainApplet.java:43) 


Fail 2: 
C:\Documents and Settings\test\Desktop\test>java -Djna.library.path=. -jar Audio 
.jar 
Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load librar 
y gstreamer-0.10 
     at org.gstreamer.lowlevel.GNative.loadWin32Library(GNative.java:83) 
     at org.gstreamer.lowlevel.GNative.loadLibrary(GNative.java:43) 
     at org.gstreamer.lowlevel.GstNative.load(GstNative.java:42) 
     at org.gstreamer.lowlevel.GstNative.load(GstNative.java:39) 
     at org.gstreamer.Gst.<clinit>(Gst.java:59) 
     at video.MyVideo.simpletest(MyVideo.java:31) 
     at sipphone.MainApplet.run(MainApplet.java:58) 
     at sipphone.MainApplet.main(MainApplet.java:43) 
+2

Ich könnte das Offensichtliche sagen, aber haben Sie daran gedacht, die Bibliothek auch für Windows zu erstellen? Also, gibt es eine 'gstreamer-0.10.dll' in Ihrem' lib'-Verzeichnis? –

+1

Dies ist, was ich habe in lib Verzeichnis von C: \ Dokumente und Einstellungen \ test \ Desktop \ test \ lib 19/12/2010 22:09

. 19/12/2010 22:09 .. 19/12/2010 22:09 806.222 gstreamer-java-1.4.jar 19/12/2010 22:09 629.821 jna-3.0.4.jar 2 Datei (s) 1.436.043 bytes 2 Dir (s) 486.473.728 Bytes frei – YumYumYum

+1

Ich bin nicht vertraut mit gstreamer, aber vom ersten Eindruck, sollten Sie in irgendeiner Weise installieren GStream auf Ihrem Windows-Box, und zeigen Sie die 'jna.library .path' (wahrscheinlich nicht 'java.library.path') zum Speicherort, an dem die DLLs gespeichert sind. Das oder versenden Sie die DLLs mit. –

Antwort

2

Sie müssen die DLL installiert haben oder zumindest in Ihrem JNA-Bibliothekspfad, wie andere darauf hingewiesen haben.

Es fügt eine zusätzliche Abhängigkeit von Windows hinzu. Es wäre eine zusätzliche Abhängigkeit von Linux, aber Gstreamer ist von Ihrer Distribution vorinstalliert. Ich stieß auf dasselbe Problem, als ich etwas machte, um einen USB-Port von Java zu verwenden. Die einzige Lösung, die ich kenne, um die DLL zu vermeiden, wäre, eine zweite Version des Codes zu haben, den man unter Windows verwenden könnte, der nur Win32-Dateien verwendet (also Sachen, die mit Windows ausgeliefert werden), aber das wäre sehr groß Unternehmen.

+1

Danke für die Info. Trotzdem sehe ich viele Probleme damit. Ich kann eine webbrowserbasierte Anwendung für Linux/Windows machen. Aber nicht für Mac, wenn ich vorhabe, mit GStream voranzukommen und 92 kHz bis 192 kHz Audioübertragung zu machen. Ich denke mein Projekt wird ein Misserfolg sein, um mit dem WEB Browser Erfolg zu haben. Wenn ich über 48 khz machen muss. – YumYumYum

-2

Für Ausfallen 1: Ich glaube nicht, dass die ~/ Syntax unter Windows arbeiten. Versuchen Sie stattdessen %HOME%\. Die tilde expansion passiert in Bash, also sind die Dinge in Windows ein bisschen anders.

Für Fehler 2: Es sieht nicht so aus, als wäre die .dll in Ihrem Testverzeichnis und Sie setzen jna.library.path auf ..

Wenn sich die .dlls in Ihrem lib-Verzeichnis befinden, sollten dann nicht die Pfade auf dieses Verzeichnis gesetzt werden, statt ~/jni und .?

+0

wenn ich .jar warum habe ich wieder .dll? Warum Audio.jar dann ausführt, aber nicht das .jar für JNA's? – YumYumYum

+1

auch wenn ich es funktioniert, aber es lädt nicht die JNA? Aber es ist ein Glas von Linux, was ist der Punkt, den ich DLL dann haben muss. – YumYumYum

+1

Versucht dies aber kein Glück, scheitert. \ test> java -Djna.library.path = lib -jar Aud io.jar java.lang.UnsatisfiedLinkError: Die Bibliothek konnte nicht geladen werden y gstreamer-0.10 bei org.gstreamer.lowlevel.GNative.loadWin32Library (GNative.java: 83) – YumYumYum

1

versuchen, mediabrenderer aus Cling-Paket zu starten, hatte ich den gleichen Fehler auf Windows XP. bekam ich die richtigen libgstreamer-0.10.so von Paket GStreamer-WinBuilds-GPL-x86-Beta04-0.10.7.msi gefunden in https://code.google.com/archive/p/ossbuild/downloads

einmal installiert (Umgebungsvariablen PATH (für Abhängigkeiten) und OSSBUILD_GSTREAMER_DIR set), in einem raschen, war ich endlich in der Lage Mediarenderer mit folgenden Syntax ausführen lib einführen Pfad:

Z:\Downloads\cling-distribution-2.1.0\cling-distribution-2.1.0\mediarenderer\target>java -Djna.library.path="C:\Program Files\OSSBuild\GStreamer\v0.10.7\bin" -jar cling-mediarenderer-2.1.0-standalone.jar 

hoffe das hilft als Ausgangspunkt!

Verwandte Themen