Java调用C语言

Java调用C语言
Java Native Interface(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。通常有以下几种情况我们需要使用JNI来实现。 
标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的 
你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的 
程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们 
下面我们开始编写HelloWorld程序,由于涉及到要编写c/c++代码因此我们会在开发中使用Microsoft VC++工具。编写java代码,我们在硬盘上建立一个hello目录作为我们的工作目录,首先我们需要编写自己的java代码,在java代码中我们会声明native方法,代码非常简单。如下所示 
class HelloWorld 
{ 
public native void displayHelloWorld(); 
static { 
System.loadLibrary("hello"); 
} 

public static void main(String[] args) { 
new HelloWorld().displayHelloWorld(); 
} 
} 
注意我们的displayHelloWorld()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("hello")这句代码,它是在静态初始化块中定义的,系统用来装载hello共享库,这就是我们在后面生成的hello.dll(如果在其他的操作系统可能是其他的形式,比如hello.so) 
编译java代码 
javac HelloWorld.java 生成HelloWorld.class文件 
创建.h文件 
这一步中我们要使用javah命令生成.h文件,这个文件要在后面的c/c++代码中用到,我们运行 
javah HelloWorld。这样我们可以看到在相同目录下生成了一个HelloWorld.h文件,文件内容如下 
在此我们不对他进行太多的解释。 
/* DO NOT EDIT THIS FILE - it is machine generated */ 
#include <jni.h> 
/* Header for class HelloWorld */ 
#ifndef _Included_HelloWorld 
#define _Included_HelloWorld 
#ifdef __cplusplus 
extern "C" { 
#endif 
/* 
* Class: HelloWorld 
* Method: displayHelloWorld 
* Signature: ()V 
*/ 
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld 
(JNIEnv *, jobject); 
#ifdef __cplusplus 
} 
#endif 
#endif 
编写本地实现代码 
在这部分我们要用C/C++语言实现java中定义的方法,我们在VC++中新建一个Project,然后创建一个HelloWorldImp.cpp文件,内容如下 
#include <jni.h> 
#include "HelloWorld.h" 
#include <stdio.h> 

JNIEXPORT void JNICALL 
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) 
{ 
printf("Hello world!\n"); 
return; 
} 
注意我们这里include了 jni.h和刚才得到的HelloWorld.h文件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。编译通过后再生成hello.dll文件。 
运行java程序 
把上面生成的hello.dll文件复制到我们的工作目录,这时候我们的目录中包括HelloWorld.java,HelloWorld.class和hello.dll文件。运行java HelloWorld命令,则可在控制台看到Hello world| 
的输出了。
运行VC++; 
文件---新建---选“win32 console application”(控制台程序)---在右方设置好路径并输入工程名---确定 
接下来的几个提示框点确定就行了,那是提示是否要用VC++提供的框架之类的 

在左边的工作空间中选“FILEVIEW”标签项,点开“+”号,右键点击“SOURCE FILES”,选“添加文件到目录”,此即添加你要建立的C++源程序文件,会提示你没有文件,是否添加,你点是,输入文件名保存就OK了 

然后SOURCE FILES下就出现了你刚才建立的*.CPP文件,双击,输入代码. 

以下就是点”组建”菜单中的”编译”、”组建”等命令进行调试了。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章