虽然很少或者说Java本身也不推荐用Java去调用Native/Dynamic DLL,但是Java还是提供了该功能,以方便开发人员可以利用Navtive code去更好的实现Java不能实现的功能(比如效率原因或者很多老的代码)。
有好几种方法可以让JAVA在运行过程中找到并加载DLL:
1. Call System.load去加载dll (绝对路径)
import com.chilkatsoft.CkZip;
public class Test {
static {
try {
System.load("C:/chilkatJava/chilkat.dll");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
public static void main(String argv[])
{
CkZip zip = new CkZip();
System.out.println(zip.version());
}
}
2. 复制DLL 到 java.library.path中的任何一个路径当中
首先查看当前的路径有哪些,比如在DOS命令下 echo %PATH%或者利用下面的代码去查看
String property = System.getProperty("java.library.path");
StringTokenizer parser = new StringTokenizer(property, ";");
while (parser.hasMoreTokens()) {
System.err.println(parser.nextToken());
}
Note: Java.library.path的初始化值包含了PATH, 只不过文件夹的先后顺序可能不一样,当然当前路径肯定在Java.library.path里面,但是不一定在PATH里面。
如果要加载的dll在这些目录下的任何一个,则跟方法1比较,不需要绝对路径,
import com.chilkatsoft.CkZip;
public class Test {
static {
try {
System.loadLibrary("chilkat");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
public static void main(String argv[])
{
CkZip zip = new CkZip();
System.out.println(zip.version());
}
}
3.修改PATH环境变量,增加DLL所在的目录
修改环境变量的方式有几种,但是并不是所有的方式在Run-Time都是有效的。
通过控制面板修改环境变量是有效的,不过不同的操作系统在修改环境变量的时候界面不一样,
注意: 通过DOS 命令去修改PATH (set PATH=c:\childJava;%PATH%)是无效的,同时通过以下Java程序去修改PATH也是无效的,
static {
try {
// Adding a directory to java.library.path here will not change anything.
// System.loadLibrary will still look in the directories listed in java.library.path
// as it existed at the very start of the program.
// The extra directory path added to java.library.path will not
// be searched by loadLibrary.
String libpath = System.getProperty("java.library.path");
libpath = libpath + ";C:/chilkatJava";
System.setProperty("java.library.path",libpath);
System.loadLibrary("chilkat");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
4. 启动java程序的时候通过DOS命令并且利用选项-D 去设置java.library.path.
java -Djava.library.path=c:\chilkatJava TestAPP
5. 如果是Eclipse进行调试则在Eclipse里设置Java.library.path
在Eclipse右键 project,选择properties, 然后选择Run/Debug Settings, 然后选择tab页"Arguments",在该页面中的VM Arguments编辑框中增加
“-Djava.library.path="c:\chilkatJaa;${env_var:PATH}"”,其中 c:\chilkatJava文件夹下包含chilkat.dll
总结:
通过上述的几种方法,实际上都是修改的Java.library.path,由于在启动java程序的时候,对该变量的加载只有一次(具体可以查看JDK 源代码),在启动后修改都是无效的,你会发现所有有效的修改都是在启动java application之前完成的。
原网址https://www.chilkatsoft.com/java-loadlibrary-windows.asp