我创建了一个.dylib
文件,我想使用JNI加载它,但无法让Java程序找到它。
我以编程方式检查了java.library.path
的值,它是:
/Users/potato/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
当我将.dylib
文件放置在这些文件夹之一中时,我的Java程序检测到.dylib
文件并没有问题,但是当我尝试更改java.library.path
以包括路径时到我的桌面文件夹,并将.dylib
文件放在我的桌面上,程序找不到它。
System.setProperty("java.library.path", "/Users/potato/Desktop:" + System.getProperty("java.library.path"));
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("winfnc");
output:
/Users/potato/Desktop:/Users/potato/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no winfnc in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
知道我在做什么错吗?是否可以使程序在我想要的任何文件夹中找到.dylib
文件,或者更好的方法是在其自己的.jar
文件中并成功加载该文件?
编辑:一个答案提供了一种使用命令行的解决方案,但是我希望能够通过双击可执行文件.jar
来启动应用程序,而不必担心任何技术问题。
可以在Eclipse中添加VM参数,但是仅在从Eclipse启动程序时使用它们,而不能通过直接打开可运行的.jar
文件来使用。
答案 0 :(得分:1)
java.library.path
不能在程序内部进行更改。您可以设置该属性,但是它的值仅在VM启动时使用,并且不会再次读取。您必须使用-D