2 回答

TA貢獻1850條經(jīng)驗 獲得超11個贊
jnative的使用始終報錯是路徑出現(xiàn)問題
我的路徑看圖
public class HelloWorld {
//本地方法
public native void sayHello(User u);
//加載動態(tài)庫
static {
System.loadLibrary("hello");
}
//本類方法
public void sayHello(String str){
System.out.println(str);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HelloWorld hw = new HelloWorld();
//java
hw.sayHello("Hello World for java!");
//jni
User u = new User(10,"zou");
hw.sayHello(u);
}
}
1、環(huán)境設(shè)置。
JNative的調(diào)試信息需要打開才能更清楚些,要不總是說沒加載庫,跟沒說一樣。
System.setProperty("jnative.debug", "true");
如果調(diào)試信息里有System.LoadLibrary(),說明沒有加載JNativeCpp.dll,指定全路徑即可,雙斜杠哦。
System.setProperty("jnative.loadNative", "D:\\Test\\JNativeCpp.dll");
2、lib庫路徑問題
windows
在windows下需要把調(diào)用的dll路徑設(shè)置到環(huán)境變量PATH中,除非你不介意拷到win32中,dll依賴的庫也得在PATH或win32中。
linux
linux下同樣需要設(shè)置環(huán)境變量,編輯bashrc,添加 export LD_LIBRARY=so路徑,依賴的庫也得在PATH中,除非都放在/usr/lib/下
3、lib庫名稱問題
無論linux還是windows在JNative的構(gòu)造函數(shù)中的lib庫名字為庫全名,包括擴展名dll、so,而且so需要包括前面的‘lib’,貌似與網(wǎng)上說的不太一樣。
4、資源釋放問題
有些設(shè)備需要先初始化在操作,最后釋放,所有功能都分散在不同函數(shù)中,JNative需要有個靜態(tài)的實例,每次創(chuàng)建調(diào)用函數(shù)時lib庫依舊是加載的。

TA貢獻1776條經(jīng)驗 獲得超12個贊
你沒有導(dǎo)入JNative的Jar包..或是導(dǎo)入沒有導(dǎo)入好...
你再仔細(xì)查一下... 我想應(yīng)該是這個原因...因為
它根本就找不到 add 方法!
添加回答
舉報