我有使用 JNA 并获取音频和视频的应用程序。它可以在我的 Linux 机器上运行。但是当我在 Windows 中测试它时。它只是从来没有工作过。因为我还在学习,我会感谢你关于如何修复它的建议,我已经花了几天和几周的时间来解决它,但只是不明白为什么 JAVA 不能简单地工作,它是一个跨平台。为什么还需要系统路径或其他配置。
我现在完全迷失了,为什么它在 Linux 中工作而在 Windows XP 中不起作用?那我该如何运行它呢?
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)
最佳答案
您需要安装 DLL,或者至少像其他人指出的那样安装在您的 JNA 库路径中。
它确实增加了对 Windows 的额外依赖。这将是对 Linux 的额外依赖,但 gstreamer 是由您的发行版预安装的。当我在 Java 中使用 USB 端口制作一些东西时,我遇到了同样的问题。
据我所知,避免 DLL 的唯一解决方案是拥有可以在 Windows 上调用的代码的第二个版本,该代码仅使用 Win32 内容(即 Windows 附带的内容),但这将是一项非常艰巨的任务.
关于java - 如何解决JNA这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4492610/