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文件,雙擊,輸入代碼. 

以下就是點”組建”菜單中的”編譯”、”組建”等命令進行調試了。 

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