Java使用JNI調用DLL的問題總結

     最近做項目的要使用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文件了。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章