更改`java.library.path`后找不到.dylib文件

时间:2019-01-22 16:43:29

标签: java java-native-interface

我创建了一个.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文件来使用。

1 个答案:

答案 0 :(得分:1)

java.library.path不能在程序内部进行更改。您可以设置该属性,但是它的值仅在VM启动时使用,并且不会再次读取。您必须使用-D

进行设置

另请参阅我的答案:https://stackoverflow.com/a/51304696/2543253