java - 我怎样才能解决 CLASSPATH 问题并在 OSX 上编译 OpenKinect Java 示例?

标签 java jar java-native-interface kinect

很抱歉发布了另一个 Java jar 问题。我确实看过现有的 similar questions , 但仍未设法获得 Example使用现有答案中的建议运行类(class)。

到目前为止,这是我尝试过的:

george-profenzas-macbook:src george$ ls
Example.java    org
george-profenzas-macbook:src george$ javac -cp $CLASSPATH Example.java 
george-profenzas-macbook:src george$ ls
Example$1.class Example$2.class Example$3.class Example.class   Example.java    org
george-profenzas-macbook:src george$ java -cp $CLASSPATH Example
Exception in thread "main" java.lang.UnsatisfiedLinkError: no OpenKinect in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1045)
    at org.openkinect.Context.<clinit>(Context.java:43)
    at Example.main(Example.java:52)
george-profenzas-macbook:src george$ echo $CLASSPATH
/Users/george/Downloads/shiffman-libfreenect-2e0f185/wrappers/java/dist/OpenKinect.jar:.

看起来它没有找到 OpenKinect 的路径。我尝试将 jar 复制到同一文件夹中(cp ../../dist/OpenKinect.jar),然后再次尝试运行示例:

george-profenzas-macbook:src george$ java -cp OpenKinect.jar Example
Exception in thread "main" java.lang.NoClassDefFoundError: Example
Caused by: java.lang.ClassNotFoundException: Example
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

现在它似乎没有找到 Example 的路径,所以我假设 $CLASSPATH 中的 . 没有工作,我不知道为什么。

我一直在来回玩 -cp 但 java 说“不!”:

george-profenzas-macbook:src george$ java -cp "OpenKinect.jar:./Example.java" Example
Exception in thread "main" java.lang.NoClassDefFoundError: Example
Caused by: java.lang.ClassNotFoundException: Example
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
george-profenzas-macbook:src george$ java -cp "OpenKinect.jar:." Example
Exception in thread "main" java.lang.UnsatisfiedLinkError: no OpenKinect in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1045)
    at org.openkinect.Context.<clinit>(Context.java:43)
    at Example.main(Example.java:52)
george-profenzas-macbook:src george$ java -cp .:OpenKinect.jar Example
Exception in thread "main" java.lang.UnsatisfiedLinkError: no OpenKinect in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1045)
    at org.openkinect.Context.<clinit>(Context.java:43)
    at Example.main(Example.java:52)

它似乎找到了 jar 的路径,但没有找到 Example 的路径,或者相反,我在原地转圈。 我将 java 路径设置为指向 1.6 64 位,因此 java -version 打印:

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)

我什至将 jar 复制到 /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Classes 并将 jnilib 复制到 /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Libraries,但没有快乐。

有什么建议吗?

最佳答案

这里是对错误信息的误解。类路径和库路径之间存在差异。当您使用 jar 和当前目录的点获得正确的类路径时,您没有指定 Kinect SDK native 部分所在的路径。

您可以通过添加

-Djava.libray.path=(path to where the native Kinect libs lie)

我不知道 OpenKinect 结构,但它通常是某种“bin”或“native”目录。

澄清一下:这是 OpenKinect.dll(对于 Windows)或 libOpenKinect.so(Linux 和 friend )等所在的路径。

参见 http://openkinect.org/wiki/Java_JNI_Wrapper在页面的最底部。

关于java - 我怎样才能解决 CLASSPATH 问题并在 OSX 上编译 OpenKinect Java 示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8278091/

相关文章:

java - 是否可以在不先安装 java 的情况下在机器上运行可执行 jar 文件?

java - 缺少 :xxx. jar 的代码库 list 属性

eclipse - Tomcat 中的 native 库 UnsatisfiedLinkError + Windows + eclipse

android - jmethodID 的 NewGlobalRef

java - 初始部署后将代码/jar 添加到 Google 应用引擎应用程序

java - "malloc(): memory corruption"

java - ParseEnum(方法)无法从 SuperCSV (Java) 中的 .csv 文件解析/读取字符串作为枚举

java - 为什么不能在 Java 中将 Integer 转换为 String?

java - 将递归组合查找算法转换为迭代算法以避免 GC Overhead Limit Exceeded 错误

java - JPanel 放置在 JScrollPane 后面