免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 945 | 回复: 0
打印 上一主题 下一主题

JNI(Java Native Interface) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-24 20:23 |只看该作者 |倒序浏览
JNI:Java Native Interface
允许Java代码和其他语言(如c/c++)编写的代码进行交互

㊣ JNI的实现具体步骤

1 编写带native方法声明的Java类

编写带本地方法声明的类ExJNI.java

public class ExJNI {

    // 加载ExJNI.dll文件
    static {
        System.loadLibrary("ExJNI");
    }

    // 显示欢迎信息
    public native void welcome();

    // 计算int[]数组之和
    public native int sum(int[] numbers);

    // 显示欢送信息
    public native void bye();

}

2 使用javac命令编译java类

javac ExJNI.java

3 使用javah命令生产头文件

javah -jni ExJNI (自动生成ExJNI.h头文件如下)

/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class ExJNI */

#ifndef _Included_ExJNI
#define _Included_ExJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     ExJNI
* Method:    welcome
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_ExJNI_welcome
  (JNIEnv *, jobject);

/*
* Class:     ExJNI
* Method:    sum
* Signature: ([I)I
*/
JNIEXPORT jint JNICALL Java_ExJNI_sum
  (JNIEnv *, jobject, jintArray);

/*
* Class:     ExJNI
* Method:    bye
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_ExJNI_bye
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

4 编写本地实现方法

编写ExJNI.cpp实现本地方法

#include
#include
#include "ExJNI.h"

JNIEXPORT void JNICALL Java_ExJNI_welcome(JNIEnv *env, jobject obj)
{
    printf(" - - - Welcome Here - - - \n");
    return ;
}

JNIEXPORT jint JNICALL Java_ExJNI_sum(JNIEnv *env, jobject obj, jintArray nums)
{
    int i, sum = 0;
    jsize len = env->GetArrayLength(nums);
    jint *numbers = env->GetIntArrayElements(nums, 0);
    for (i = 0; i
    {
        sum += numbers;
    }
    env->ReleaseIntArrayElements(nums, numbers, 0);
    return sum;
}

JNIEXPORT void JNICALL Java_ExJNI_bye(JNIEnv *env, jobject obj)
{
    printf(" - - - Bye, See You - - - \n");
    return;
}

5 生成c/c++代码的动态链接库

cl -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 -LD ExJNI.cpp -FeExJNI.dll(注意空格)

6 编写测试类

public class ExMain {

    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5, 6};
        ExJNI exjni = new ExJNI();
        exjni.welcome();
        int sum = exjni.sum(numbers);
        System.out.println("\tsum = " + sum);
        exjni.bye();
    }

}

㊣个人理解

参考jni.h头文件(一般放置的位置为%JAVA_HOME%\include目录下)




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22660/showart_160156.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP