转载请注明出处
http://blog.csdn.net/pony_maggie/article/details/45441587
作者:小马
JAVA可以通过JNI接口访问本地的动态连接库(JAVA NATIVE INTERFACE),从而扩展JAVA的功能。我们知道JAVA有一个最大的有点就是它的平台无关性,但这个优点也导致了java访问底层设备的能力不足,而JNI正是弥补了这种不足。
下面通过一个完整的,简单的示例,来详细说明JNI的使用。
首先我们在eclipse下编写一个java的小程序,这个程序通过调用一个本地的方法输出字符串到命令行。
package com.mess; public class ShowMessage { private native void ShowMessage(String msg); static { System.loadLibrary("MsgImpl"); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ShowMessage appMessage = new ShowMessage(); appMessage.ShowMessage("with jni"); } }
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_mess_ShowMessage */ #ifndef _Included_com_mess_ShowMessage #define _Included_com_mess_ShowMessage #ifdef __cplusplus extern "C" { #endif /* * Class: com_mess_ShowMessage * Method: ShowMessage * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_com_mess_ShowMessage_ShowMessage (JNIEnv *, jobject, jstring); #ifdef __cplusplus } #endif #endif
#include <jni.h> #include <stdio.h> #include "com_mess_ShowMessage.h" extern "C" JNIEXPORT void JNICALL Java_com_mess_ShowMessage_ShowMessage (JNIEnv *env, jobject, jstring jMsg) { printf("first output"); const char* msg = env->GetStringUTFChars(jMsg, 0); printf("thingking in:%s \n", msg); env->ReleaseStringUTFChars(jMsg, msg); }
把生成的动态库放到C:\Java\jdk1.5.0_22\bin目录下,在eclipse里运行java程序,输出: