這裏是C++的實現輸出「HelloWorld」的方法,而後回到Java中進行調用。html
(1)在Eclipse中創建一個類:JNIDemojava
|
(2)使用javah命令將JNIDemo生成.h的頭文件:ios
命令以下:c++
E:\workspace\JNIDemo\bin>javah com.jni.demo.JNIDemoapp
注意:ide
1. 確保配置了Java的環境變量:spa
http://blog.csdn.net/jiangwei0910410003/article/details/17463173.net
(內容:ClASSPATH中輸入: ".;C:\Program Files\Java\jdk1.7.0_07\jre\lib\rt.jar;"//java的安裝目錄,特別要注意有點號和分號PATH中輸入:"C:\Program Files\Java\jdk1.7.0_07\bin;" )htm
2. 進入到工程的bin目錄中,而後使用javah命令生成頭文件blog
3. javah後面的類文件的格式:是類的全名(包名+class文件名),同時不能有.class後綴
命令執行成功後會在bin目錄中生成頭文件:com_jni_demo_JNIDemo.h
包含native方法的類,若是引用其餘地方的類,那麼這時候進入bin\classes\目錄下會出現問題提示找不到指定的類,這時候咱們須要切換到源碼目錄src下運行便可。
(3)使用VC6.0生成.dll文件:
首先建立一個dll工程:
在.cpp文件中輸入以下代碼:
|
說明:
1. JNIEXPORT void JNICALL Java_com_jni_demo_JNIDemo_sayHello (JNIEnv * env, jobject obj)
{
cout<<"Hello World"<<endl;
}
這個方法的聲明能夠在上面生成的com_jni_demo_JNIDemo.h頭文件中找到,這個就是Java工程中的sayHello方法的實現
2. 這裏編譯會出現幾個問題:
(1):會提示你找不到相應的頭文件:
這時候須要將jni.h,jni_md.h文件考到工程目錄中,這兩個文件的具體位置在:
java的安裝目錄中的include文件夾下,jni_md.h這個文件在win32文件夾中,找到這兩個文件後,將其拷貝到C++的工程目錄中;
(2) 當拷貝到這兩個文件以後,編譯仍是提示找不到這兩個文件:主要緣由就是#include<jni.h>這個是從系統目錄中查找jni.h頭文件的,而咱們只把jni.h拷貝到工程目錄中,因此須要在com_jni_demo_JNIDemo.h頭文件中將#include<jni.h>改爲#include "jni.h",同理在jni.h文件中將#include<jni_md.h>改爲#include "jni_md.h"
(3) 同時還有一個錯誤就是,提示:e:\c++\jnidemo\jnidemo.cpp(9) : fatal error C1010: unexpected end of file while looking for precompiled header directive,這個是預編譯頭文件讀寫錯誤,這時候還要在VC中進行設置:項目-》設置-》C/C++;在分類中選擇預編譯頭文件,選擇不使用預補償頁眉:
這樣,編譯成功,生成JNIDemo.dll文件在C++工程中的Debug目錄中
第四步:將JNIDemo.dll文件添加到path環境變量中:
注意:在用戶變量中的path設置,用分號隔開: 」 ;E:\C++\Debug「,這樣就將.dll文件添加到環境變量中了
第五步:在Eclipse中調用sayHello方法輸出"Hello World":代碼以下:
|
System.loadLibrary方法就是加載JNIDemo.dll文件的,必定要注意不要有.dll後綴名,只須要文件名便可;
注意:運行的時候會報錯:
這個提示就是沒有找到JNIDemo.dll文件,這時候咱們須要關閉Eclipse,而後在打開,運行就沒有錯了,緣由是Eclipse每次打開的時候都會去讀取環境變量的配置,咱們剛纔配置的path,沒有當即生效,因此要關閉Eclipse,而後重新打開一次便可。
至此,一個簡單的JNI例子到此演示完畢,後續還有更高級的應用,要及時關注呀!
附【來自網友ETH0:
http://www.newsmth.net/nForum/#!article/DOC/14371】:
有一些jni 的wrapper,不是用java來實現,只是封裝了native
的mpi庫。
1.mpiJava
http://aspen.ucs.indiana.edu/pss/HPJava/mpiJava.html
2.Java MPI Wrapper
http://www.npac.syr.edu/users/yjchang/javaMPI/
http://www.npac.syr.edu/users/yjchang/mpi/mpi.html
3.JPVM
http://www.cs.virginia.edu/~ajf2j/jpvm.html