在eclipse中创建一个包含外部库(OpenCV)的jar文件

时间:2014-04-09 09:36:59

标签: java eclipse opencv

我正在尝试在Mac上创建我的应用程序的可执行jar,它使用OpenCV中的函数。但是当我尝试在eclipse中创建jar时,我得到了这个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java248 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at imageRegistration.ImageGUI.main(ImageGUI.java:643)

我认为错误是因为有一个.dylib文件链接到OpenCV jar并且没有与它一起打包。

我找到this,这似乎与我遇到的问题相同,但解决方案对我不起作用。这就是我所做的:

public static void libLoad(){
    try{
    InputStream in = ImageGUI.class.getResourceAsStream("/lib/opencv-2.4.8 MAC/build/lib/libopencv_java248.dylib");
    File fileOut = File.createTempFile("lib", ".dylib");

    OutputStream out = FileUtils.openOutputStream(fileOut);
    IOUtils.copy(in, out);
    in.close();
    out.close();
    System.load(fileOut.toString());
    } catch(Exception e) {
        System.out.println("Failed to load opencv native library \n" + e);
    }
}

我运行时遇到的错误是:

Failed to load opencv native library 
java.lang.NullPointerException

编辑:这是完整的堆栈跟踪:

java.lang.NullPointerException
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792)
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769)
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744)
    at imageRegistration.ImageGUI.libLoad(ImageGUI.java:624)
    at imageRegistration.ImageGUI.main(ImageGUI.java:643)

2 个答案:

答案 0 :(得分:0)

您需要打印完整的堆栈跟踪,但NPE的来源并不清楚。最有可能的是ImageGUI.class.getResourceAsStream返回null。如果这是真的,那就是因为路径错误或者jar不在jar中

答案 1 :(得分:0)

您可以尝试将本机OpenCV DLL文件放在JRE的bin目录下。至少它对我有用