System.load 和 System.loadLibrary详解

1.它们都可以用来装载库文件,不论是JNI库文件还是非JNI库文件。在任何本地方法被调用之前必须先用这个两个方法之一把相应的JNI库文件装载。

2.System.load 参数为库文件的绝对路径,可以是任意路径。
例如你可以这样载入一个windows平台下JNI库文件:

java中system报错 java system.load_System



  1. System.load("C:\\Documents and Settings\\TestJNI.dll");。  

3. System.loadLibrary 参数为库文件名,不包含库文件的扩展名。


例如你可以这样载入一个windows平台下JNI库文件


java中system报错 java system.load_System



  1. System. loadLibrary ("TestJNI");  

这里,TestJNI.dll 必须是在java.library.path这一jvm变量所指向的路径中。


可以通过如下方法来获得该变量的值:


java中system报错 java system.load_System



  1. System.getProperty("java.library.path");  

默认情况下,在Windows平台下,该值包含如下位置:


1)和jre相关的一些目录


2)程序当前目录


3)Windows目录


4)系统目录(system32)


5)系统环境变量path指定目录



4.如果你要载入的库文件静态链接到其它动态链接库,例如TestJNI.dll 静态链接到dependency.dll,那么你必须注意:


1)如果你选择


java中system报错 java system.load_System



  1. System.load("C:\\Documents and Settings\\ TestJNI.dll");  

那 么即使你把dependency.dll同样放在C:\\Documents andSettings\\下,load还是会因为找不到依赖的dll而失败。因为jvm在载入TestJNI.dll会先去载入TestJNI.dll所依赖的库文件dependency.dll,而dependency.dll并不位于java.library.path所指定的目录下,所以jvm找不到dependency.dll。


你有两个方法解决这个问题:


一是把C:\\Documents andSettings\\加入到java.library.path的路径中,例如加入到系统的path中。二是先调用


java中system报错 java system.load_System



  1. System.load("C:\\Documents and Settings\\ dependency.dll");  

让jvm先载入dependency.dll,然后再调用


java中system报错 java system.load_System



  1. System.load("C:\\Documents and Settings\\ TestJNI.dll");  

2)如果你选择


java中system报错 java system.load_System



  1. System. loadLibrary ("TestJNI");  

那么你只要把dependency.dll放在任何java.library.path包含的路径中即可,当然也包括和TestJNI.dll相同的目录。



java的System.getProperty()方法可以获取的值



java.version


Java 运行时环境版本



java.vendor


Java 运行时环境供应商



java.vendor.url


Java 供应商的 URL



java.home


Java 安装目录



java.vm.specification.version


Java 虚拟机规范版本



java.vm.specification.vendor


Java 虚拟机规范供应商



java.vm.specification.name


Java 虚拟机规范名称



java.vm.version


Java 虚拟机实现版本



java.vm.vendor


Java 虚拟机实现供应商



java.vm.name


Java 虚拟机实现名称



java.specification.version


Java 运行时环境规范版本



java.specification.vendor


Java 运行时环境规范供应商



java.specification.name


Java 运行时环境规范名称



java.class.version


Java 类格式版本号



java.class.path


Java 类路径



java.library.path


加载库时搜索的路径列表



java.io.tmpdir


默认的临时文件路径



java.compiler


要使用的 JIT 编译器的名称



java.ext.dirs


一个或多个扩展目录的路径



os.name


操作系统的名称



os.arch


操作系统的架构



os.version


操作系统的版本



file.separator


文件分隔符(在 UNIX 系统中是“/”)



path.separator


路径分隔符(在 UNIX 系统中是“:”)



line.separator


行分隔符(在 UNIX 系统中是“/n”)



user.name


用户的账户名称



user.home


用户的主目录



user.dir


用户的当前工作目录