在导出时提供System.loadLibrary的Dll路径

时间:2011-09-29 18:12:09

标签: java dll java-native-interface

我想导出使用JNI接口的Java应用程序,并通过System.loadLibrary(“dllName”)加载Dll;

a)Dll文件存在于Java Project文件夹和C盘中,这是JVM在运行时搜索dll的地方之一。

问题:当我将这个项目作为Jar导出并将其提供给客户端时,客户端应该能够运行该工具而无需输入Dll文件。我想不出通过另一种方式实现这一点;使用System.load(“path:\”)提供绝对路径;因为我不知道用户将Jar文件下载到哪里。你能帮我解决这个问题吗?非常感谢你。

3 个答案:

答案 0 :(得分:1)

您需要将DLL放在运行应用程序的相同路径中,在系统路径中,或者在启动应用程序之前将其路径添加到PATH变量中。

答案 1 :(得分:0)

以下代码段将加载DLL而不管工作目录是否与JAR文件位于同一目录中:

CodeSource codeSource = MainClass.class.getProtectionDomain().getCodeSource();
File jarFile = new File(codeSource.getLocation().toURI().getPath());
File parentDir = jarFile.getParentFile();
File dllFile = new File(parentDir, "my.dll");
System.load(dllFile.getPath());

答案 2 :(得分:0)

查看Runtime.load

  

将指定的文件名加载为动态库。文件名   参数必须是完整的路径名。从java_g它将   在“.so”之前自动插入“_g”(例如   调用Runtime.getRuntime()加载( “/家/ AVH / LIB / libX11.so”);。。)

     

首先,如果有安全管理器,则调用其checkLink方法   以文件名作为参数。这可能会带来安全性   异常。

     

这与方法loadLibrary(String)类似,但它接受a   通用文件名作为参数而不仅仅是库名,   允许加载任何本机代码文件。

     

方法System.load(String)是常规且方便的   调用此方法的方法。