Java JNI详述

来源:互联网 发布:python 多行注释快捷键 编辑:程序博客网 时间:2024/06/14 00:43

什么是JNI:

JNI就是Java代码调用C代码的一种机制。是Java平台的重要补充。 优点就是,可以扩展Java功能。比如Java网络API中不提供TCP层以下协议实现。比如ICMP协议。既Ping。 所以无论什么方法都无法通过纯Java代码(不包含C)开发出类似Ping的程序。唯有通过JNI可实现。 缺点: 使用JNI开发的程序就限制了平台无关特性。 

如何开发JNI程序呢?

我们写一个简单的入门程序, 打印简单的Hello,JNI。看一下是如何运行的。

1. 编程Java代码。

package jni;

public class HelloJNI {
  public native void showMessage();
  static{
System.loadLibrary("hellojni");
  }
  public static void main(String[] args) {
  new HelloJNI ().showMessage();
 }
}
2. 将该Java代码编译为Class文件。 注意native标识的方法为本地方法,及由JNI实现的方法。
javac jni\HelloJNI.java
3. 使用javah命令将生成的Class文件产生C文件的头文件。 命令如下。
javah jni.HelloJNI
4. 创建动态链接文件,以下以Windows为例创建DLL工程。
将jni.h(在jdk的include目录下)及javah 生成的jni_HelloJNI.h放到C 工程。
编写C程序如下
#include "jni.h"
#include "jni_HelloWorld.h"
JNIEXPORT void JNICALL Java_jni_HelloJNI_showMessage(JNIEnv *env, jobject obj)
{
  printf("Hello, JNI\n");
 return;
}
5. 编译工程。 注意需要把jdk的include目录,jdk\lib目录加入到C工程的编译路径中。就是说C编译环境可以找到jni.h及所需lib包。
6. 编译后生成DLL文件。
7. 将DLL文件加入到Java工程中,Path路径里。即可编译。
如何调试呢?
编译好程序了,可以正常运行则好。 不然运行不正常怎么调试呢?
调试Java我们可以用JDB进行调试。调试C程序我们可以用CDB调试。

原创粉丝点击