关闭

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

898人阅读 评论(0) 收藏 举报
分类:
     最近做项目的要使用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文件了。 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8964次
    • 积分:285
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类