JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。
1,在eclipse中需要做的事:
创建一个Java工程,如下图:
编写一个类Testdll.java,内容如下:
package com.lonsine.www.jni; public class Testdll { static { System.out.println( System.getProperty("java.library.path"));//当你不知道dll文件放哪里的时候,查看此路径 System.loadLibrary("goodluck");//这是声明类库 } //下面是需要调用的接口方法,具体实现放在C++程序中实现 public native static int get(); public native static void set(int i); public static void main(String[] args){ Testdll test=new Testdll(); test.set(10); System.out.println(test.get()); } }
2,找到编译后生成的Testdll.class 文件的目录的上一目录,在本项目中是F:\eclipse\bendiban\jnidemo\bin这个目录,通过cmd进入到该目录,然后执行javah com.lonsine.www.jni.Testdll如下图所以
表示成功,生成com_lonsine_www_jni_Testdll.h头文件,文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_lonsine_www_jni_Testdll */ #ifndef _Included_com_lonsine_www_jni_Testdll #define _Included_com_lonsine_www_jni_Testdll #ifdef __cplusplus extern "C" { #endif /* * Class: com_lonsine_www_jni_Testdll * Method: get * Signature: ()I */ JNIEXPORT jint JNICALL Java_com_lonsine_www_jni_Testdll_get (JNIEnv *, jclass); /* * Class: com_lonsine_www_jni_Testdll * Method: set * Signature: (I)V */ JNIEXPORT void JNICALL Java_com_lonsine_www_jni_Testdll_set (JNIEnv *, jclass, jint ); #ifdef __cplusplus } #endif #endif
3, 安装时没有把jdk相关的jni头文件加入到VC++6.0的include文件夹中,
Include文件夹中的jni.h、win32下的jawt_md.h、jni_md.h加入到..\VC98\Include目录下,如果已经存在,则不必添加做这步。
4, 使用VC++6.0创建一个名为goodluck.dll的文件
1) 打开VC++6.0,选择File->New->Win32 Dynamic-Link Library 填写你的Location和Project name ,Project name在这里填goodluck,然后点击OK。
2) 将com_lonsine_www_jni_Testdll.h拷贝到goodluck工程文件夹中。
3) 添加源文件goodluck.cpp,内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_lonsine_www_jni_Testdll */ #ifndef _Included_com_lonsine_www_jni_Testdll #define _Included_com_lonsine_www_jni_Testdll #ifdef __cplusplus extern "C" { #endif /* * Class: com_lonsine_www_jni_Testdll * Method: get * Signature: ()I */ JNIEXPORT jint JNICALL Java_com_lonsine_www_jni_Testdll_get (JNIEnv *, jclass); /* * Class: com_lonsine_www_jni_Testdll * Method: set * Signature: (I)V */ JNIEXPORT void JNICALL Java_com_lonsine_www_jni_Testdll_set (JNIEnv *, jclass, jint ); #ifdef __cplusplus } #endif #endif
4)点击编译成动态库就完成了。
5,把在Debug文件夹中生成的goodluck.dll 文件拷贝到eclispse根目录下,即是System.getProperty("java.library.path");中显示的路径下。运行如下:
这是我自己做的整个过程!