java - 运行引用 OpenCV 的 Jar 文件的 Java 程序

标签 java opencv jar compilation

我发现无法运行依赖 OpenCV jar 文件的程序。我已经使用“javac -cp opencv-300.jar *.java”进行了编译,但尝试运行 java Program 意味着它找不到主类,因此我运行了 java Program.Program,它引发了有关查找 OpenCV 类的异常.

我尝试了java“-Djava.library.path =”。 -jar opencv-300.jar 但只返回“opencv-300.jar 中没有主要 list 属性”。我尝试反编译 jar 并使用 java -cp 运行。 Program.Program 并返回“UnsatisfiedLinkError: java.library.path 中没有 opencv_java300”,但这似乎是一条可怕的路径。

有人知道我该如何让这该死的东西运行吗?在 Windows 8 和 Ubuntu 14.04LTS 上尝试,两者结果相同。请帮忙!

编辑:我可以上传公共(public) Dropbox 链接,以便人们可以亲自查看这是否有帮助。

最佳答案

您需要使用 jar 文件打包静态库,将该静态库加载到临时文件中,然后从该路径加载静态库。

在资源中创建一个名为opencv的文件夹,并将.dll.dylib.so文件放入各自的文件夹中。

public class LoadLibrary {
public static void loadOpenCV() {
    try {
        InputStream inputStream = null;
        File fileOut = null;
        String osName = System.getProperty("os.name");
        System.out.println(osName);

        if (osName.startsWith("Windows")) {
            int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model"));
            if (bitness == 32) {
                inputStream = LoadLibrary.class.getResourceAsStream("/opencv/windows/x86/opencv_java300.dll");
                fileOut = File.createTempFile("lib", ".dll");
            } else if (bitness == 64) {
                inputStream = LoadLibrary.class.getResourceAsStream("/opencv/windows/x64/opencv_java300.dll");
                fileOut = File.createTempFile("lib", ".dll");
            } else {
                inputStream = LoadLibrary.class.getResourceAsStream("/opencv/windows/x86/opencv_java300.dll");
                fileOut = File.createTempFile("lib", ".dll");
            }
        } else if (osName.equals("Mac OS X")) {
            inputStream = LoadLibrary.class.getResourceAsStream("/opencv/mac/libopencv_java300.dylib");
            fileOut = File.createTempFile("lib", ".dylib");
        }

//make check for linux

        if (fileOut != null) {
            OutputStream outputStream = new FileOutputStream(fileOut);
            byte[] buffer = new byte[1024];
            int length;

            while ((length = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, length);
            }

            inputStream.close();
            outputStream.close();
            System.load(fileOut.toString());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

更改静态{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); } 到 Main 中或调用 OpenCV 函数之前的 LoadLibrary.loadOpenCV();

并尝试从 Eclipse 导出您的 jar 文件。它会工作得很好。

关于java - 运行引用 OpenCV 的 Jar 文件的 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33140288/

相关文章:

java - dx java转换错误

java - 为什么不能将嵌套通配符分配给具有类型参数的变量?

c++ - imread 不能在 qt 上工作

java - 如何找出某个类属于哪个 JAR 文件?

maven - 使用 Maven 创建多个配置文件 jar

java - 如何使变量在Java中随处可用而无需参数

java - 如何从露天网站获取所有网站提要?

python - OpenCV如何从噪声和误报中清除轮廓

java - OpenCV-从图像中去除噪声

java - 从 ant 创建的 Jar 无法找到外部 jar