这里是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