タイトル
TOPJavaJNI → This Page

JNI サンプル(引数 int、戻り値が文字列)

前置き

ここではJavaJNI(Java Native Interface)のサンプルを紹介します。

サンプル概要

Java から 引数 int、戻り値が文字列の C の関数を呼び出すサンプルです。
引数の値が 5 以下なら ...5、5 を超えるなら 6... が表示されます。


SampleJava3.java

呼び出す側(Java)として以下のファイルを作成します。
public class SampleJava3 {
	// ライブラリをロード
	static {System.loadLibrary("SampleC3");}
	
	// ネイティブメソッドを宣言
	public native String showHello(int num);
	
	public static void main(String[] args) {
		SampleJava3 main = new SampleJava3();
		
		// ネイティブメソッドを実行
		System.out.println(main.showHello(5));
		System.out.println(main.showHello(6));
	}
}

コマンドプロンプトを開き、以下のコマンドでコンパイルします。
(パスは SampleJava3.java を作成したフォルダにして下さい)
javac SampleJava3.java

SampleJava3.h

コマンドプロンプトを開き、以下のコマンドでヘッダファイルを出力します。
(パスは SampleJava3.java を作成したフォルダにして下さい)
javah -jni SampleJava3

すると以下の内容のファイルが作成されます。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class SampleJava3 */

#ifndef _Included_SampleJava3
#define _Included_SampleJava3
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     SampleJava3
 * Method:    showHello
 * Signature: (I)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_SampleJava3_showHello
  (JNIEnv *, jobject, jint);

#ifdef __cplusplus
}
#endif
#endif

SampleC3.cpp

呼び出される側(C)として以下のファイルを作成します。
先ほど Java を作成したフォルダと同じフォルダに作成して下さい。
#include "SampleJava3.h"
JNIEXPORT jstring JNICALL Java_SampleJava3_showHello
(JNIEnv *env, jobject obj, jint jnNumber) {
	long lnum = jnNumber;
	if (lnum < 6) {
		return env->NewStringUTF("...5");
	}
	else {
		return env->NewStringUTF("6...");
	}
}

コマンドプロンプトを開き、以下のコマンドでコンパイルします。
(パスは SampleJava3.java を作成したフォルダにして下さい)
bcc32 -IC:\j2sdk1.4.2_08\include -IC:\j2sdk1.4.2_08\include\win32 -tWD SampleC3.cpp

(注意)
上記の C:\j2sdk1.4.2_08 部分は各自のマシンの JDK のパスにあわせて下さい。

警告は出るかもしれませんが、エラーが出なくて DLL が作成されればコンパイル成功です。


コンパイルのパスについての注意点
JDK のパスに半角スペースなどが含まれている場合は、パスをダブルクォートで囲む必要があります。
bcc32 -I"C:\Program Files\Java\j2sdk1.4.2_08\include" -I"C:\Program Files\Java\j2sdk1.4.2_08\include\win32" -tWD SampleC3.cpp


サンプルの実行

コマンドプロンプトを開き、以下のコマンドで実行します。
(パスは SampleJava3.java を作成したフォルダにして下さい)
java SampleJava3

...5
6... と表示されれば成功です。

サンプルのダウンロード

サンプルのダウンロード


更新履歴

2008/04/01 コンパイル時のパスについて注意点追加
2007/12/01 Javaのコーナー細分化に伴い、URL の変更


TOPJavaJNI → This Page