具体说明:一个java程序传递参数到c++程序,经过c++程序处理后将结果返回给java。
总体来讲,java运行的时间要大于c++的,所以当程序非常复杂时,可以将复杂的代码让c++实现,这样整个系统的运行时间会大大减少的。
实现方法如下:
1.首先 在记事本里写一个基本的java程序,后缀名为.java,我的程序的名字为 my.java .代码如下:
public class my{
static{System.loadLibrary("good");}// 加载动态链接库good
public native static int sum(); //实现两个数的相加,c++要实现的函数
public native static void set(int a,int b);//给c++传递参数,c++要实现的函数
public static void main(String args[]){
my mm=new my();
mm.set(3,4);
System.out.println(mm.sum());
}
}
2.在cmd中编译java程序,输入javac my.java。
3.使java程序生成my.h文件,输入javah my。 这样java部分的工作就算做完了。
my.h的代码:(这是自动生成的,不要修改,你可以查看,你可以分析一下里面的内容)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class my */
#ifndef _Included_my
#define _Included_my
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: my
* Method: sum
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_my_sum
(JNIEnv *, jclass);
/*
* Class: my
* Method: set
* Signature: (II)V
*/
JNIEXPORT void JNICALL Java_my_set
(JNIEnv *, jclass, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
c++部分:
1.打开vc++,新建Win32 Dynamic-llink library ,名字为good,和java中的static{System.loadLibrary("good");}// 加载动态链接库good
是对应的。其他的默认就行了。
2.然后再新建一个头文件,名字是任意的,把my.h中的代码复制进去即可。
3.然后新建一个c++应用程序,名字也是任意的,代码为:
#include "my.h"
int i=0,j=0;
JNIEXPORT jint JNICALL Java_my_sum
(JNIEnv *, jclass){
return i+j;}
JNIEXPORT void JNICALL Java_my_set
(JNIEnv *, jclass, jint a, jint b){
i=a;j=b;
}
4.编译生成good.dll,(出现问题,看下面的强调)注意只需要编译,不需要运行的,把生成的good.dll和my.class放在同一个位置,这样c++部分也算完成了。
5.运行java程序,输入java my,会输出 7,这是java程序传送的参数3,4的缘故。
强调:这就是整个过程的介绍,但是做的时候可能会遇到一些问题,如果编译c++时出现找不到jni.h的文件,不要急,你只需要把jdk文件下的include中的jni.h和include下的win32下的jawt-md.h和jni-md.h拷进vc安装包的include下即可。