gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:03:55 28 4
gpt4 key购买 nike

我发现无法运行依赖 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com