欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java JNI实践,javajni实践

来源: javaer 分享于  点击 39294 次 点评:25

Java JNI实践,javajni实践


JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互(如C/C++),很好 的解决了JAVA不能跨语言的缺陷。自己简单的拼凑了一个小例子。

无图无真相,先上图(图是参照别人的画的):

实现步骤:

准备: C/C++开发工具用的VC++,Java用的eclipse

1、用eclipse定义如下NativeTest.java

public class NativeTest {
	static {
	  //加载本地库
		System.loadLibrary("NativeTest");
	}
  
  /*
   *定义本地方法
   *@param msg 申明要带的参数
   **/
	private static native void sayHello(String msg);

	public static void main(String[] args) {
	  //调用本地方法
    NativeTest.sayHello("The First Native Program");
    System.out.println("\n---OVER----");
	}

}

2、进入src目录编译NativeTest.java生成NativeTest.class文件,再使用命令javah NativeTest生成供C\C++使用的头文件 NativeTest.h,如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class NativeTest */

#ifndef _Included_NativeTest
#define _Included_NativeTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     NativeTest
 * Method:    sayHello
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_NativeTest_sayHello
  (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif

3、打开VC++建立一个Win32 Dynamic-Link Library工程

在弹出以下窗口后选择简单的DLL工程,再点击完成


将 NativeTest.h拷贝放置C工程目录下。


选中 NativeTest.h导入工程

编辑StdAfx.h,在最后面加上

#include " NativeTest.h"


打开NativeTest.cpp

将NativeTest.h中的

JNIEXPORT void JNICALL Java_NativeTest_sayHello
  (JNIEnv *, jclass, jstring)

拷贝贴进去并实现,如下:

JNIEXPORT void JNICALL Java_NativeTest_sayHello
  (JNIEnv * env, jclass obj, jstring jMsg)
{
        const char *strMsgPtr = env->GetStringUTFChars( jMsg , 0);   
      printf(strMsgPtr);
       env->ReleaseStringUTFChars( jMsg, strMsgPtr);  
}

OK。F7 biuld一把会出现以下错误:



解决思路有三种:

a、\jdk\include\jni.h       \jdk\include\win32\jawt_md.h    \jdk\include\win32\jni_md.h
复制到VC++的安装目录下的\VC98\include目录中

b、将\jdk\include\jni.h  \jdk\include\win32\jawt_md.h    \jdk\include\win32\jni_md.h拷贝到C的工程目录,并将NativeTest.h 中的 #include <jni.h>改成#include "jni.h"


c、点击VC++菜单栏的工具按钮---> 选择 选项 ----> 点击弹出窗体选项卡上的目录 ----> 点击新建图标 添加上jdk所在文件夹下的includeinclude\win32文件夹。




再编译, OK。成功。


4、将C工程debug目录生成的NativeTest.dll拷贝到java的运行目录。(ps: 跟class丢在一起)

5、java NativeTest 打印以下内容, 调用成功了。


相关文章

    暂无相关文章
相关栏目:

用户点评