JNA使用问题及解决
生活随笔
收集整理的這篇文章主要介紹了
JNA使用问题及解决
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
因項目催得很急,盡管對JNA(Java調(diào)用Windows動態(tài)庫)不熟悉,還是使用了JNA庫。那么使用自己不了解的東西,總是很容易出現(xiàn)各種奇怪的問題。可反過來想想,哪有不存在技術難點的項目呢?是吧?當程序員就是個辛苦的行業(yè),被項目逼著不停地去學習,去解決問題;但正因如此,程序員也是快樂的人,因為解決問題后,獲得的成就感和喜悅感是很值得的。呵呵,不廢話了,分享下我使用JNA遇到的問題及解決辦法吧。
搜索路徑
1. 項目的根路徑;例:E:\workspace\test
2. 操作系統(tǒng)的全局路徑;C:\WINDOWS 、C:\WINDOWS\system32
3. path指定的路徑。
這是我遇到的一個問題:
我是將最新的動態(tài)庫文件放到 JDK 目錄下,提示的問題是:找不到最新的動態(tài)庫文件。
首先需要排除的是,在哪些地方存在這個動態(tài)庫文件,所以用Everything查找ComtradeData.dll文件,全部刪除直至剩下一個位置存在這個文件;第二步嘗試將最新的動態(tài)庫文件放到 system32 目錄。如果放到 system32 可以了,說明 JDK 目錄的加載路徑有問題,所以沒有 Java 找不到這個文件。
后面想想,可能是因為 JAVA_HOME 環(huán)境變量,造成 JDK 目錄沒有加載到 path 目錄的緣故吧。
工作流程
遇到的問題:
failed to create temporary file for jnidispatch: Java.IO.Exception: 系統(tǒng)找不到指定路徑at com.sun.jna.Native.loadNativeLibraryFromJar(Native.java:751)這個問題主要是對JNA的工作流程不了解而不知道怎么解決,那么Google就成了最好的幫手。通過搜索,知道JNA的工作流程是會需要創(chuàng)建臨時文件的。如果臨時文件創(chuàng)建不了,就提示這種錯誤了。
順便,JNA的實際實現(xiàn)方法是如下實現(xiàn)的 (http://waffle.codeplex.com/discussions/243500):
JNA uses libffi, a magical native implementation that translates Javaunderneath JNA extracts a native DLL into the temporary folder and then loadsWhen the process exits it kills that DLL.
大體意思是,JNA用到 libffi 庫,通過這個庫將 需要調(diào)用的 DLL 庫加載到一個臨時文件,當使用完畢后,再釋放 libffi 庫。
然后,知道需要臨時文件,那么就查找 JNA 的臨時文件再哪?有兩種情況:一是臨時文件夾不存在;二是Java對臨時文件夾沒有寫的權(quán)限。
那JNA的臨時文件夾路徑在哪呢?網(wǎng)上給出了這幾個位置:%TMPDIR%/jna, system library load path, %TEMP%, Tomcat's temp dir。
到這時,我發(fā)現(xiàn)了咱們的 tomcat 下沒有 temp 這個文件夾,馬上創(chuàng)建這個文件夾試試,呵呵,就解決了!
總結(jié)
以上是生活随笔為你收集整理的JNA使用问题及解决的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2016年11月5日学习总结
- 下一篇: 上海三菱电梯LEHY,LEGY,上海三菱