有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jar如何克服类路径问题并在OSX上编译OpenKinect Java示例?

很抱歉又发布了一个JavaJAR问题。我确实查看了现有的similar questions,但仍然没有使用现有答案中的建议运行Example

以下是我迄今为止所做的尝试:

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的路径。我尝试在同一文件夹(cp ../../dist/OpenKinect.jar)中复制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)

现在它似乎没有找到示例的路径,所以我假设$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的路径,但没有找到示例,要么找到了另一条路径,我在绕圈子。 我将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,但没有乐趣

有什么建议吗


共 (1) 个答案

  1. # 1 楼答案

    你对错误信息有误解。类路径和库路径之间存在差异。虽然使用jar和当前目录的点获得了正确的类路径,但没有指定Kinect SDK本机部分所在的路径

    你可以通过添加

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

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

    澄清一下:这是OpenKinect的路径。dll(适用于Windows)或libOpenKinect。所以(Linux和friends)等都位于

    见本页最下方的http://openkinect.org/wiki/Java_JNI_Wrapper