當前位置:首頁 > 資訊 > info6 > 正文

jni入門教程之HelloWorld

發表于: 2013-08-30   作者:cheerfor2008   來源:轉載   瀏覽:
摘要: 簡介JavaNativeInterface(JNI)是Java語言的本地編程接口,是J2SDK的一部分。在java程序中,我們可以通過JNI實現一些用java語言不便實現的功能。通常有以下幾種情況我們需要使用JNI來實現。標準的java類庫沒有提供你的應用程序所需要的功能,通常這些功能是平臺相關的。你希望使用一些已經有的類庫或者應用程序,而他們并非用java語言編寫的。程序的某些部分對速度要求比較

簡介

Java Native Interface(JNI)是Java語言的本地編程接口,是J2SDK的一部分。在java程序中,我們可以通過JNI實現一些用java語言不便實現的功能。通常有以下幾種情況我們需要使用JNI來實現。
標準的java類庫沒有提供你的應用程序所需要的功能,通常這些功能是平臺相關的。
你希望使用一些已經有的類庫或者應用程序,而他們并非用java語言編寫的。
程序的某些部分對速度要求比較苛刻,你選擇用匯編或者c語言來實現并在java語言中調用他們。
在《java核心技術》中,作者提到JNI的時候,建議不到萬不得已不要使用JNI技術,一方面它需要你掌握更多的知識才可以駕馭,一方面使用了JNI你的程序就會喪失可移植性。

HelloWorld

下面我們開始編寫HelloWorld程序,由于涉及到要編寫c/c++代碼因此我們會在開發中使用Microsoft Visual C++工具。

編寫Java代碼:

package com.lixing.jni;
public class HelloWorld {
	public native void helloWorld();
	static {
		System.loadLibrary("HelloWorld");
	}
	public static void main(String[] args) {
		new HelloWorld().helloWorld();
	}
}
注意我們的helloWorld()方法的聲明,它有一個關鍵字native,表明這個方法使用java以外的語言實現。方法不包括實現,因為我們要用c/c++語言實現它。注意System.loadLibrary("HelloWorld")這句代碼,它是在靜態初始化塊中定義的,系統用來裝載HelloWorld共享庫,這就是我們在后面生成的HelloWorld.dll(如果在其他的操作系統可能是其他的形式,比如HelloWorld.so)。

編譯java代碼:
javac HelloWorld.java,生成HelloWorld.class文件。

創建.h文件:

這一步中我們要使用javah命令生成.h文件,這個文件要在后面的c/c++代碼中用到。
進入dos,在HelloWorld.class文件所屬包的根路徑下面,使用javah com.lixing.jni.HelloWorld命令。這樣我們可以看到在根目錄下生成了一個com_lixing_jni_HelloWorld.h文件,文件內容如下。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_lixing_jni_HelloWorld */

#ifndef _Included_com_lixing_jni_HelloWorld
#define _Included_com_lixing_jni_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_lixing_jni_HelloWorld
 * Method:    helloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_lixing_jni_HelloWorld_helloWorld
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

編寫本地實現代碼:

在這部分我們要用C/C++語言實現java中定義的方法,我們在VC++中新建一個Win32 Console Application Project,然后創建一個HelloWorld.cpp文件,內容如下:
#include "stdafx.h"
#include<jni.h>
#include"com_lixing_jni_HelloWorld.h"
#include<stdio.h>
JNIEXPORT void JNICALL Java_com_lixing_jni_HelloWorld_helloWorld (JNIEnv *, jobject){
	printf("HelloWorld!");
	return;
}

注意我們這里include了jni.h和剛才得到的com_lixing_jni_HelloWorld.h文件。因此你要在VC++里面設置好,jni.h在JAVA_HOME/include里面。Jni.h中又用到了"jni_md.h",在JAVA_HOME/include/win32里面。

生成HelloWorld.dll文件:

打開DOS窗口,切換到HelloWorld.cpp所在目錄。
輸入cl /c HelloWorld.cpp并回車,生成HelloWorld.obj。
再輸入link /dll HelloWorld.obj并回車,生成HelloWorld.dll。

運行java程序:

將生成的dll文件放入system32文件夾即可。

運行結果:
HelloWorld!

jni入門教程之HelloWorld

版權所有 IT知識庫 CopyRight ? 2009-2015 IT知識庫 IT610.com , All Rights Reserved. 京ICP備09083238號
广东25选5开奖结果