2010-09-27 99 views
5

我正在使用Java開發應用程序,並且我有一個需要能夠使用的庫。該庫有一個jar文件和一個dll文件。目前我已經將dll文件放入我的系統文件夾並將該jar與IDE連接起來。我的問題是,我想將所有東西都打包成一個可供用戶運行的可執行jar文件(可能使用webstart)。打包JNI庫

如何生成這個jar文件,而無需用戶複製系統文件夾內的dll?有什麼方法可以將所有內容放入單個存檔中?

+0

http://forums.sun.com/thread.jspa?threadID=5358593這可能會解決您的問題 – 2010-09-27 09:47:45

回答

3

您可以將.dll打包到.jar中,但物理.dll文件必須先從那裏解壓縮,然後才能加載,因爲Windows如何處理.dll s。無法直接從.jar中加載.dll

This question似乎包含一個適當的實現。但是請注意,它有點容易出錯:如果程序沒有將權限寫到要提取.dll的位置,那麼你處於一個奇怪的情況;您無法加載.dll,因爲您無權先寫入。

一個更強大的解決方案是使用某種形式的安裝程序的整個應用程序安裝到一個目錄結構如

/whatEver/myApp/     (The working directory of the app.) 
/whatEver/myApp/myApp.jar  (The main app.) 
/whatEver/myApp/lib/library.dll (The JNI library.) 

然後,你可以簡單地使用相對路徑的工作目錄加載DLL,

System.loadLibrary("lib/library.dll"); 

爲了更加健壯,您需要確保在嘗試加載庫之前運行帶有適當位數的JVM。一個小廣告的事實是,64位虛擬機無法加載32位庫,反之亦然。請參閱this問題。