我想导出使用JNI接口的Java应用程序,并通过System.loadLibrary(“dllName”)加载Dll;
a)Dll文件存在于Java Project文件夹和C盘中,这是JVM在运行时搜索dll的地方之一。
问题:当我将这个项目作为Jar导出并将其提供给客户端时,客户端应该能够运行该工具而无需输入Dll文件。我想不出通过另一种方式实现这一点;使用System.load(“path:\”)提供绝对路径;因为我不知道用户将Jar文件下载到哪里。你能帮我解决这个问题吗?非常感谢你。
答案 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)是常规且方便的 调用此方法的方法。