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