System.load(String filename)和System.loadLibrary(String libname)的区别详解编程语言
其实JDK提供给用户了两个方法用于载入文件,一个是System.load(String filename)方法,另外一个是System.load(String libname)方法,本文主要写一下这两个方法之间的区别。
区别
1、加载的路径不同
System.load(String filename)我们看JDK API的描述是“从作为动态库的本地文件系统中以指定的文件名加载代码文件。文件名参数必须是完整的路径名。”,因此这个方法的参数必须是要加载的文件的完整路径,带文件后缀名。
System.loadLibrary(String libname)我们看JDK API的描述是“加载由libname参数指定的系统库。将库名映射到实际系统库的方法取决于系统”,这里关键问题就是系统库三个字。什么是系统库,做个实验,修改一下static块中的代码,用loadLibrary方法来加载
运行一下,看一下结果
看到报错了,在java.library.path中没有找到Hello,OK,那这样就很简单了,我们知道了系统库指的是java.library.path,用System.getProperty(String key)方法查看一下java.library.path指向的内容
打印的内容太多了,就不放上来了,反正放到任意的一个路径下都可以,注意一下不要带后缀名。至于java.library.path指的是什么,网上很多,就不做复制黏贴的工作了。
2、这个是网上看别人写的才知道的,假如A.dll和B.dll有依赖关系,比如 A.dll静态链接到B.dll,那么如果选择System.load( D:/A.dll ),即使B.dll也放在D:/路径下,load方法还是会 因为找不到依赖的.dll文件而失败。因为Java虚拟机在载入A.dll的时候,发现它依赖于B.dll,那么会先去 java.library.path下载入B.dll,而B.dll并不位于java.library.path下。有两个解决方案:
(1)先System.load( D:/B.dll )再System.load( D:/A.dll )
(2)把A.dll和B.dll都放在java.library.path下,然后调用System.loadLibrary( A )
不过两个dll文件存在依赖关系,A.dll依赖于B.dll,属于别的领域的知识,我也不是很清楚,所以第二点也没有亲身试验过。权当把这个知识点放在这儿,以后万一遇到类似问题了,也有个解决问题的方向。
20565.html
cjava相关文章
- Java容器(三):LinkedList源码分析详解编程语言
- 对javascript中String类型的拓展详解编程语言
- 扩展String JdbcTemplate获得插入数据的主键详解编程语言
- Java产生100个1-150间不重复数字详解编程语言
- 用java实现linux上exe文件的版本号读取功能详解编程语言
- 猴子吃桃问题详解编程语言
- mysql varchar 转 decimal详解编程语言
- 小白的Python之路 day5 configparser模块的特点和用法详解编程语言
- java equals和==区别及string类的说明详解编程语言
- [javaSE] 异常捕获详解编程语言
- Akka(37): Http:客户端操作模式详解编程语言
- Java String.split()用法小结详解编程语言
- Java String对象以“引用”方式被传递详解编程语言
- 深入理解java String 对象的不可变性详解编程语言
- String类的intern()方法详解编程语言
- ConcurrentMap、hashTable与hashMap的区别详解编程语言
- Java8 中String 的变化详解编程语言
- 40个Java多线程问题总结,新手必备详解编程语言
- java Timer(定时调用、实现固定时间执行)详解编程语言
- NIO之FileChannel类的理解和使用详解编程语言
- Java 经典实例: Unicode字符和String之间的转换详解编程语言
- ASP.NET Core1.0 带来的新特性详解编程语言
- Jsp获取Java的重定向赋值(String)详解编程语言
- 深入理解Java中的String详解编程语言
- 线程同步中的锁详解编程语言
- C++string类的实现详解编程语言
- 解析json异常Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $问题详解编程语言
- 移动端实现裁剪图片生成base64图片(可缩放)详解编程语言
- php 5.5使用 array_column的方法详解编程语言
- [问题解决]更新订单BOM中的Qty Var-Sz Item字段失败详解编程语言
- 使用函数BALW_BAPIRETURN_GET给BAPIRETURN赋值详解编程语言
- python之hashlib模块详解编程语言