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

原创 2013年12月05日 11:52:59
     最近做项目的要使用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文件了。 

相关文章推荐

java中调用dll文件的两种方法

一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676   JNativ...
  • jimmy609
  • jimmy609
  • 2014年02月11日 14:30
  • 45348

JAVA调用动态链接库DLL之JNative学习

JAVA调用动态链接库DLL的方法有:JNI(Java Native Interface),JInvoke,JNative(Java to native interface),JNI是JAVA自身提供...

JNI java调用动态链接库dll

#include #include JNIEXPORT void JNICALL JAVA_ConDll_open(JNIEnv *env,jobject obj);          生成的头文件...

java调用dll动态库文件的一般总结

前一段时间,在项目需求中,需要调用一下第三方的动态库文件,下面是本人一些尝试的经历。   首先需要明白的是,在java中是不能直接调用动态库文件的,因为动态库文件是使用c或是c++编写的,作为一种跨...
  • kahhy
  • kahhy
  • 2017年02月17日 10:46
  • 1356

eclipse上java项目通过jni调用dll动态库

今天研究了一下jni调用dll的问题,参考了网上一些文章(以下是帮助最大的),最后终于成功了: http://www.myexception.cn/eclipse/1338831.html http:...
  • scl365
  • scl365
  • 2014年03月31日 19:24
  • 1559

Java工作笔记:部署Tomcat时使用jni和jna调用DLL文件的问题

部署Tomcat时使用jni和jna调用DLL文件的问题 我的前一篇博客提到,我们公司项目的restful框架中要用到底层的DLL C++库,最后经过测试验证结果选择采用JNA方法来调DLL库。之...
  • zjutzmh
  • zjutzmh
  • 2016年07月29日 23:10
  • 2892

Java通过JNI调用本地DLL

    Java语言本身是通过Java的虚拟机解释执行的,因此对于Java中调用本地动态链接库的问题便提上了日程,为何会存在这样的需求呢?因为Java本身的机制导致一些要求高效率的程序难以通过Java...

Unable to load sqlite_jni: java.lang.UnsatisfiedLinkError: Native Library D:/resin/bin/sqlite_jni.dll already loaded in another

问题:web每次请求都会动态连接数据库;dbname是个数据库名参数,private Connection getConn() throws SQLException{        Connecti...
  • yangsp1
  • yangsp1
  • 2009年04月23日 13:20
  • 6821

Java通过JNI调用C++的DLL库

Java通过JNI调用C++程序, 在VS2015实现。

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java使用JNI调用DLL的问题总结
举报原因:
原因补充:

(最多只允许输入30个字)