java动态加载dll文件
来源:互联网 发布:淘宝忘记密码修改密码 编辑:程序博客网 时间:2024/05/22 15:33
1、java工程加载JNI文件
* 过程:在项目中加入JNI(.dll)文件和对应的java类文件,选择build path->Source->Native library location->edit->选择.dll文件位置。
* 错误:
(1)加载dll文件错误,未报错,但方法执行失败,这是dll文件位置错误,应该放到项目目录下。
(2)加载dll错误,jdk位数与dll文件生成位数不一致。
2、web工程加载JNI文件
* 将dll文件放在WEB-INF目录下
* 使用监听类listener.LoadListener.java加载动态资源文件。
注意:在加载过程中,要加载所有相关的dll文件。
* 导入与动态资源文件相关的类。
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path+"HCNetSDK",HCNetSDK.class);//加载本地资源
* 过程:在项目中加入JNI(.dll)文件和对应的java类文件,选择build path->Source->Native library location->edit->选择.dll文件位置。
* 错误:
(1)加载dll文件错误,未报错,但方法执行失败,这是dll文件位置错误,应该放到项目目录下。
(2)加载dll错误,jdk位数与dll文件生成位数不一致。
2、web工程加载JNI文件
* 将dll文件放在WEB-INF目录下
* 使用监听类listener.LoadListener.java加载动态资源文件。
注意:在加载过程中,要加载所有相关的dll文件。
public void contextInitialized(ServletContextEvent arg0) {//获取存放dll文件的绝对路径(假设将dll文件放在系统根目录下的WEB-INF文件夹中) String path=arg0.getServletContext().getRealPath("WEB-INF"); //将此目录添加到系统环境变量中 addDirToPath(path); //加载相应的dll/so文件,注意要将'\'替换为'/' System.load(path.replaceAll("\\\\","/")+"/UHFReader288.dll"); System.load(path.replaceAll("\\\\","/")+"/com_rfid_uhf288_Device.dll"); }private void addDirToPath(String s) {try{//获取系统path变量对象 Field field=ClassLoader.class.getDeclaredField("sys_paths"); //设置此变量对象可访问 field.setAccessible(true); //获取此变量对象的值 String[] path=(String[])field.get(null); //创建字符串数组,在原来的数组长度上增加一个,用于存放增加的目录 String[] tem=new String[path.length+1]; //将原来的path变量复制到tem中 System.arraycopy(path,0,tem,0,path.length); //将增加的目录存入新的变量数组中 tem[path.length]=s; //将增加目录后的数组赋给path变量对象 field.set(null,tem); } catch (Exception e) { e.printStackTrace(); } }
* 导入与动态资源文件相关的类。
注意:导入类的包名不可以变。
3、JNA动态加载使用路径:
* 在java项目中加载dll文件,文件存在lib目录下
public interface HCNetSDK extends StdCallLibrary {
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("../lib/HCNetSDK",HCNetSDK.class);
。。。
}
* 在web项目中加载dll文件,文件存在classes目录下:
public interface HCNetSDK extends StdCallLibrary {
// 获取本地资源路径,replace("%20", " ")替换路径中的空格
String path = HCNetSDK.class.getResource("/").getPath().substring(1).replace("/", "\\").replace("%20", " ");HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path+"HCNetSDK",HCNetSDK.class);//加载本地资源
}
阅读全文
0 0
- java动态加载dll文件
- 动态加载文件 DLL
- 如何动态加载DLL文件
- JAVA Web项目中DLL文件动态加载方法
- 动态加载ini文件和dll文件
- 关于java加载dll文件
- JAVA动态加载dll任意路径加载dll
- 动态加载 DLL 中的资源文件
- Notes开发如何动态加载dll文件
- Java之—— JAVA Web项目中DLL/SO文件动态加载方法
- Java之——Web项目中DLL文件动态加载方法
- Java之——Web项目中DLL文件动态加载方法
- Java动态加载jar文件
- java中动态加载文件
- 动态加载DLL
- 动态加载dll
- 动态加载DLL
- C#动态加载DLL
- MAC--PPTP教程
- 【JS】js学习笔记之把一个div拖动到另一个div上面
- 「BZOJ3930」「CQOI2015」选数
- 我开通csdn博客了
- MFC中函数GetWindowRect()和GetClientRect()的区别
- java动态加载dll文件
- 再玩HOS我就是狗!
- 使用vue-router页面跳转
- unity3D 法线贴图的制作与使用
- Spring MVC体系结构和处理请求控制器
- mysql 查询语句
- Java集合结构关系图
- android studio 代码混淆
- loj6225「网络流 24 题」火星探险问题(费用流)