当前位置: 首页 > 知识库问答 >
问题:

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

潘楚
2023-03-14

我发现不可能运行依赖OpenCV jar文件的程序。我用“javac-cp opencv-300.jar*.java”编译过,但试图运行java程序意味着它找不到主类,所以我用java程序运行。抛出有关查找OpenCV类的异常的程序。

我试过java“-Djava.library.path=“-jar opencv-300。但它只返回“在opencv-300.jar中没有主清单属性”。我试着解压jar并用java-cp运行。程序程序返回“UnsatisfiedLinkError:java.library.path中没有opencv_java300”,但这似乎是一条糟糕的路径。

有人知道我该怎么让这该死的东西跑吗?在Windows 8和Ubuntu14.04LTS上试用,结果相同。请帮忙!

编辑:我可以上传一个公共Dropbox链接,这样人们就可以自己看看这是否有帮助。

共有1个答案

佘单鹗
2023-03-14

您需要用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);} 加载库。loadOpenCV() 代码。

并尝试从Eclipse导出jar文件。它会很好用的。

 类似资料:
  • 当我使用 在intelij运行期间,一切正常。 在jar的案例中,我尝试了: 等等。它们导致正确的路径,例如: > 文件:/D:/Projects/myProject/target/classes/static/assets/config/fileName(对于toExternalForm) /D: /Projects/myProject/target/classes/static/assets/

  • 问题内容: 我创建了一个JAR文件,如下所示: 我通过双击运行了这个JAR文件(它不起作用)。因此,我从DOS提示符运行了它,如下所示: 它引发了“无法加载主类”异常。所以我提取了这个JAR文件: 我运行了类文件: 运行良好。我不知道为什么JAR文件不起作用。请告诉我运行JAR文件的步骤 问题答案: 你需要在jar文件清单中指定Main-Class。 Oracle的教程包含完整的演示,但是这是从头

  • 当我运行访问目录中其他文件的jar文件时,我得到以下: 线程“main”java.nio.file.nosuchfileException异常:src\filetobeaccessed.txt.lck在sun.nio.fs.windowsException.translateToioException(未知源)在sun.nio.fs.windowsException.reshrowasioExce

  • 注意:test.class文件也使用了example.jar文件中的类文件,有自己的包结构。 我知道我可以将它们放在一个jar文件中,不幸的是我需要将test.class文件分开。

  • 问题内容: 我如何从Java程序运行本地jar文件? jar文件不在Java调用程序的类路径中。 问题答案: 我建议你使用并启动一个新的JVM。 以下是一些入门知识:

  • 问题内容: 我有一个名为helloworld.jar的JAR文件。为了运行它,我在命令行窗口中执行以下命令: 这可以正常工作,但是我如何双击执行它?我需要安装任何软件吗? 问题答案: 最简单的方法可能是升级或重新安装Java Runtime Environment(JRE)。 或这个: 打开Windows资源管理器,从“工具”中选择“文件夹选项…” 单击文件类型选项卡,向下滚动并选择JAR文件类型