关于使用JNA爬过的坑,JNA路径问题
来源:互联网 发布:魔兽世界for mac下载 编辑:程序博客网 时间:2024/05/02 22:02
我是抱着吐槽的态度来发这篇博客的,真坑!百度找了好久,好不容易才一点一点摸索实验出来,就是一个爬坑之旅。
一号坑:32位JDK
这个属于我小白了,具体报了 Native library (win32-x86/sdtapi.dll) not found
之类的错误。
后来换了一个eclipse自带的32位报 Unsupported major.minor version 51.0
,原来用了jdk1.6。没办法,重新下载换过来。你妹的JNA只能用32位,我16G内存多少年没用过32位JDK了。
二号坑:路径问题
(CLibrary) Native.loadLibrary(filePath, CLibrary.class);
这里面的filePath,很多文章里面是直接写文件名,然后把dll文件放到环境变量的目录里面,比如什么C:/windows/system32,还有jdk的bin目录。我只想说,你们烦不烦,做个项目还要到处放文件,误人子弟。就不能放到项目里面带着走?
于是我开始用CLibrary.class.getResource(“”).getPath(),于是几个超级大的坑来了!!!
1、我的文件夹目录中用过空格的,于是得到的地址会带着URI转义过的符号,坑了我很久,所以需要处理下!
CLibrary.class.getResource("").getPath().replaceAll("%20"," ");
2、dll文件绝对不能带下划线“_”,坑爹!!但是文件夹可以带。
3、CLibrary.class.getResource(“”).getPath()的最前面居然会带一条斜杠!?!,也就是得到的路径类似“/D:/project/test”,然后又是找不到路径。这个卡了我又一会。于是最后路径这样了:
String filePath = CLibrary.class.getResource("").getPath().replaceFirst("/","").replaceAll("%20"," ")+"sdtapi.dll";
然后文件终于妥妥地放到了我的java文件旁边:
这样路径不就顺眼多了,比什么放到D盘目录,放到环境变量目录舒服多了。
好的,最后附上完整版demo代码:
package com.modules.ksdll.test;import java.net.URL;import com.sun.jna.*;public class Test { public static void main(String[] args) { try { //调用方法 int result = CLibrary.sdtapi.InitComm(1001); System.out.println("result:"+result); } catch (Exception e) { e.printStackTrace(); } }}interface CLibrary extends Library { //绝对路径的地址获取,注意要去空格,特别坑 String filePath = CLibrary.class.getResource("").getPath().replaceFirst("/","").replaceAll("%20"," ")+"sdtapi.dll"; CLibrary sdtapi = (CLibrary) Native.loadLibrary(filePath, CLibrary.class); //动态链接库中的方法 int InitComm(int port); //动态链接库中的方法 int Authenticate(); //==============================================dll public method e}
注意这里面的InitComm都是dll文件里面的方法,如果不知道dll内容的,下载一个DEPENDS.EXE进行查看。
感谢大家,最后,如果大家有什么问题,请发送邮件到shangaokun@qq.com大家一起探讨。
- 关于使用JNA爬过的坑,JNA路径问题
- JNA路径问题--Native.loadLibrary("NLPIR", CLibrary.class)的坑
- 关于JNA、JNI的使用注意
- JNA的使用
- JNA 的使用
- JNA的使用
- JNA的简单使用
- JNA的使用
- JNA的使用经历
- JNA的使用经历
- JNA的使用
- JNA的使用
- 关于JNA
- JNA
- JNA
- jna
- JNA
- JNA
- PKI 公钥基础设施
- 微信授权和测试整理
- [BZOJ2555][LCT][后缀自动机]SubString
- 斯坦福机器学习公开课随笔12
- 1007. 素数对猜想 (20)
- 关于使用JNA爬过的坑,JNA路径问题
- POJ 1019 Number Sequence(递推式)
- Codeforces Round #306 (Div. 2) D. Regular Bridge
- IOS收起键盘的几种办法(摘抄自唐巧《iOS开发进阶》)
- Arithmetic problem | 书籍复印
- 模板初探
- C++ 模板详解(一)
- Kotlin的数据类:节省很多行代码(KAD 10)_0
- tcp/ip详解(17-19)