运行一个Java程序引用OpenCV的Jar文件
我发现运行我的程序依赖于OpenCV jar文件是不可能的。我编译了“javac -cp opencv-300.jar * .java”,但试图运行java程序意味着它找不到主类,所以我运行java程序。程序,它抛出了有关查找OpenCV类的异常。运行一个Java程序引用OpenCV的Jar文件
我试过java“-Djava.library.path =”。 -jar opencv-300.jar但只返回“没有主要清单属性,在opencv-300.jar”。我试着编译jar并使用java -cp运行。 Program.Program,它返回“UnsatisfiedLinkError:java.library.path中没有opencv_java300”,但这似乎是一个可怕的路径。
有没有人有任何线索可以让这个该死的东西运行?试用Windows 8和Ubuntu 14.04LTS,两者的结果相同。请帮忙!
编辑:我可以上传一个公共的Dropbox链接,这样人们可以自己看看,如果这会有所帮助。
您需要将静态库打包为jar文件,将该静态库加载到temperory文件中,然后从该路径加载静态库。
在名为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();
}
}
}
变化主要或调用OpenCV函数之前Static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
到LoadLibrary.loadOpenCV();
。
并尝试从Eclipse中导出您的jar文件。它会工作得很好。
@SeanKelly你应该标记问题是否帮助你。 –
在哪个包中是主要的?尝试'java ... your.package.MainClass' – Marged
是的,这就是我所做的“Program.Program”是我的例子。这个问题似乎是OpenCV的jar文件,尽管在编译期间工作,但在执行过程中似乎没有什么帮助。 –
您有所有依赖性问题。首先,您对opencv-java300.jar具有编译时间依赖性。其次,在同一个jar中有运行时依赖项,并且该jar对opencv本机库有运行时依赖项。你有没有尝试设置日食与opencv合作,并从那里运行?这将是一个很好的第一步 - 有这样的指导。最后,Java包应该以全部小写命名。 – medloh