前言:执行之后,可以看到在Desktop目录下新生成的com_farsight_demo_MyJNI.h文件,该文件中自动生成,无需修改。代码中JNIEXPORT后面就是我们在C语言里需要实现的方法。
JNI开发简介及实例演示步骤有哪些,怎么样进行JNI开发,什么是JNI开发?
JNI(Java Native Interface)是指Java平台和本地C代码进行相互操作的API接口,称为Java本地代码接口。当Java程序需要访问系统的各个特性和设备时,或者一些要求效率和速度的场合时,此时应该采用JNI调用本地C或C++代码,来完成。如下图所示:

图一 JNI模型图
关于JNI函数的注册可以分为静态注册和动态注册。本文主要讲解静态注册之Java调用C语言,具体步骤如图二所示:
1)在java类中使用native声明一个本地方法,使用javac命令编译java类
2)运行javah获得头文件,包括这个本地方法的声明格式
3)用C实现本地方法
4)生成.so文件,并将其放入到共享类库中
5)在java文件中加载该类库,调用本地方法。

图二 JNI开发步骤图
具体实例演示如下所示:
(一) 首先创建MyJNI.java类,在本类中使用native生命一个方法cSayHello(),代码如下所示:
package com.farsight.demo;
public class MyJNI
{
public static native void cSayHello();
}
在Linux环境下,进入到java类所在目录,例如MyJNI.java存储在Desktop目录里,执行命令如下:

编译MyJNI.java文件,执行之后在Desktop目录里可以看到文件夹com/farsight/demo里的MyJNI.class文件。执行命令如下:

(二) 执行javah命令,生成.h文件。执行命令如下:

执行之后,可以看到在Desktop目录下新生成的com_farsight_demo_MyJNI.h文件,该文件中自动生成,无需修改。代码中JNIEXPORT后面就是我们在C语言里需要实现的方法。代码如下所示:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_farsight_demo_MyJNI */
#ifndef _Included_com_farsight_demo_MyJNI
#define _Included_com_farsight_demo_MyJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_farsight_demo_MyJNI
* Method: cSayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_farsight_demo_MyJNI_cSayHello
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
(三) 用C实现本地方法,在方法中输出一句话。MyJNI.c代码如下:
#include "com_farsight_demo_MyJNI.h"
#include
#include
J NIEXPORT void JNICALL Java_com_farsight_demo_MyJNI_cSayHello(JNIEnv * env ,jclass cl)
{
printf("hello in c called by java");
}
(四) 生成.so文件,并将其放入到共享类库中。执行之后可以看到新生成的libMyJNI.so文件。执行代码如下:

(五) 在java测试文件中加载该类库,调用本地方法。MyJNITest.java代码如下:
import com.farsight.demo.MyJNI;
public class MyJNITest
{
public static void main(String args[])
{
MyJNI.cSayHello();
}
static
{
System.loadLibrary("MyJNI");
}
}
编译并运行MyJNITest.java文件,执行之后可以看到在MyJNI.c文件中输出的一句话。执行代码如下所示:

文章出自:http://qh.itpxw.cn/peixun/software/201842412.html
文章标题:怎么样进行JNI开发
免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员
用户级别:10
机构名称:IT培训网
联 系 人:罗老师
联系电话:13783581536
联系手机:13783581536
在线客服:
在 线 QQ:
电子邮件:
网站域名:http://www.itpxw.cn
注册时间:2016-07-18 11:07
最后登录:2024-02-20 13:02
Java定义方法的格式是什么?IT培训网小编来告诉大家。所谓方法...
大家在Java教程中会学到关于Java消息推送的知识,那么,Java消息...
常用的Java日期格式转换有哪些?IT培训网小编来告诉大家。 1...
Java创建对象数组的方法是什么?IT培训网小编来告诉大家。Ja...