JNI使用流程及简单例子

JNI是Java Native Interface的简称,也就是java本地接口。它提供了若干的API实现了和Java和其他语言的通信(主要是C&C++)。在以下三种情况下会用到JNI:

  1. Java代码不存在相关功能API,例如java需要得到一个文件的属性。但是JDK中没有相关的API。
  2. 在本地还有一个别的系统,不过不是Java语言实现的,这个时候需要把两套系统整合到一起的时候。
  3. Java代码中需要用到某种算法,不过算法是用C实现并封装在动态链接库文件(DLL)当中的。
使用JNI需要3个文件,第一个是java写的声明类,用于声明C++中方法,第二个是java类,用于调用第一个java类(当然,也可以直接在第一个类中使用main函数),第三个文件是C++类,用于实现具体的方法。以下是一个具体的例子,用于实现Java调用C++方法,输出HELLO WORLD.

第一步,编写java声明类:

1.新建项目,新建HelloJava.class,包名为com.jni,代码如下:

  1. public class SayHellotoCPP {  
  2.       
  3.     public SayHellotoCPP(){  
  4.     }  
  5.     public native void sayHello(String name);  
  6. }  

第二步,用javah编译HelloJava.class成.h文件
1.安装jdk,配置环境变量
2.在cmd中进入java项目的目录,输入 javah -jni com.jni.HelloJava
3.得到com_jni_HelloJava.h文件
第三步,编写C++实现代码的项目

1.用VC++新建Win32 Dynamic-Link library工程,并将得到的com_jni_HelloJava.h文件拷贝到工程下,com_jni_HelloJava.h中自动有    JNIEXPORT void JNICALL Java_com_chnic_jni_HelloJava_sayHello
  (JNIEnv *, jobject, jstring)方法。

2.编写具体实现代码,在JNIEXPORT void JNICALL Java_com_chnic_jni_HelloJava_sayHello
  (JNIEnv *, jobject, jstring)方法方法中加入“const char* pname = env->GetStringUTFChars(name, NULL);  
    cout << "Hello, " << pname << endl; ”

3.F7编译项目,在VC++MyProjects/HelloC/Debug目录下有dll文件。

把这个DLL放到windows下面的sysytem32文件夹下面,这个是windows默认的path(或者

  1. 复制你工程的Debug目录,我这里是C:/Program Files/Microsoft Visual Studio/MyProjects/HelloEnd/Debug这个目录,把这个目录配置到User variable的Path下面。重启eclipse,让eclipse在启动的时候重新读取这个path变量。

第四步,修改HelloJava.class代码

添加

  1.  static{  
  2.         System.loadLibrary("HelloEnd");  
  3.     }  

第五步,调用HelloJava类

  1. HelloJava shp = new HelloJava();  
  2. shp.sayHello("World");
完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值