class Sorry { static { System.loadLibrary("sorry"); } public native String sorry(String name); public static void main(String[] args) { Sorry s = new Sorry(); if (args.length > 0) { String answer = s.sorry(args[0]); System.out.println("Answer is "+answer); } } } |
Native Mathod である sorry() は java.lang.String を引数にもらい、同じく java.lang.String を返す。この sorry() の実装は、次のようになる。
#include <jni.h> #include "Sorry.h" #include <stdio.h> JNIEXPORT jstring JNICALL Java_Sorry_sorry(JNIEnv *env, jobject obj, jstring name) { char answer[128]; const char *str = (*env)->GetStringUTFChars(env, name, 0); printf("Sorry, %s.\n", str); (*env)->ReleaseStringUTFChars(env, name, str); scanf("%s", answer); return (*env)->NewStringUTF(env, answer); } |
% java Sorry YOSHIDA Sorry, YOSHIDA. Welcome Answer is Welcome