eclipse java jni,Java JNI实践,javajni实践

本文详细介绍了如何使用Java Native Interface (JNI) 实现Java与C/C++的交互。通过一个简单的示例,从创建Java源文件、生成头文件、编写C++代码、解决编译错误到最后运行成功,一步步展示了JNI的实践过程,适合初学者了解和掌握JNI技术。
摘要由CSDN通过智能技术生成

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 改成#include "jni.h"

c、点击VC++菜单栏的工具按钮---> 选择 选项 ----> 点击弹出窗体选项卡上的目录 ----> 点击新建图标

添加上jdk所在文件夹下的include和include\win32文件夹。

再编译, OK。成功。

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

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

相关文章暂无相关文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值