Java Native Method の作り方 (3)
Native Method から返値をもらう

1. コード

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);
}
NewStringUTF() は、新しく java.lang.String オブジェクトを作成する。

2. 実行

% java Sorry YOSHIDA
Sorry, YOSHIDA.
Welcome
Answer is Welcome