Java使用JNI调用DLL的问题总结

6 篇文章 1 订阅
     最近做项目的要使用Java调用DLL文件,但是调用DLL文件呢,也分两种情况。
     1.Java Project调用DLL
      2.Web Project调用DLL

首先,我们讨论第一种情况。
在java项目中调用dll是很简单的,一般我们使用System类中的两个方法加载我们的dll.
     1.System.load(“dll文件的绝对路径”); 
     2.System.loadLibrary(libname);
使用第一种方法时,要使用绝对路径。第二种方法回系统会自动搜寻一些固定路径,取加载dll文件。当我们加载dll文件时,只需要把dll文件放入PATH路径下即可或者放入System32路径下也行或者直接放入java项目根目录下(不是类加载路径,是项目根目录)。
通过上面几种方法,java加载dll很容易成功,而这些方法在我们的Web中就不行了。

Web项目加载dll文件。
最近做的项目中,采用的文本文件类型的数据库sqlite,而使用sqlite包含两部分的加载,加载dll文件和jar文件。加载jar文件,我就不说了,很容易。但是,加载dll文件就不是那么容易了。你去模仿java项目把dll文件放入PATH路径下等等。那都是不行的,结果我发现在Web项目中PATH包含两部分。第一部分是jre的path,第二部分是tomcat的path。所以说我们如果想加载成功dll必须同时在两部分path路径中放入dll文件。但是,说的很容易,真正入放入两部分path时,又可能会出问题的。jre那部分的dll文件直接放入WEB-INF/classess/目录下即可。但是,在使用的时候代码应该这样写:
                String path = DBUtils.class.getResource("/").getPath();
path = path.replaceAll("%20", " ");
System.load(path + "sqlitejdbc.dll");  
使用上面的第一种方法加载dll文件。 

而tomcat中的dll文件放置位置就很讲究了。你应该把dll文件放入和启动tomcat的文件同一目录中。怎么讲呢?一般我们直接放入tomcat主目录下的bin目录下即可。那是因为,启动tomcat的命令startup.bat在bin目录下。 但是,如果启动tomcat的命令不在tomcat的bin目录呢?这时候,dll文件应该放在启动tomcat的命令所在的目录。也就是说dll总是和启动tomcat的文件在同级目录。


综上所述,java项目中使用dll,只需一份dll即可。而web项目中使用dll,就必须包含两部分同样的dll文件了。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值