株式会社イーブ|未経験・転職の方も就職可能。Javaプログラマー育成のエキスパート

HOMEJAVA技術者育成システム開発求人情報個人情報保護

ネイティブアプリケーションからJavaVMを実行する

トップページ > Java技術者育成 > Javaワンポイント > ネイティブアプリケーションからJavaVMを実行する

JNIではネイティブメソッドを実装するためのAPIだけでなくJavaVMを作成するAPIも用意されています。 これによりJavaプログラムをネイティブアプリケーションから実行することができます。

ではこのAPIを用いてネイティブアプリケーションからJavaVMを作成してHelloWorldを表示してみましょう。


hello.c:
#include 

int main(int argc, char *argv[])
{
  JavaVM *jvm;
  JNIEnv *env;
  JavaVMInitArgs vm_args;
  jclass System, PrintStream;
  jfieldID fid_out;
  jobject out;
  jmethodID mid_println;
  jstring message;

  vm_args.version = JNI_VERSION_1_6; /* 使用するJVMのバージョン */
  JNI_GetDefaultJavaVMInitArgs(&vm_args); /* JVMのオプションをデフォルト値に初期化 */

  JNI_CreateJavaVM(&jvm, (void **) &env, &vm_args); /* JVMを作成 */

  /* java.lang.System.out.println("Hello, World!"); 相当のコードをJNIで実行 */
  System = (*env)->FindClass(env,"java/lang/System");
  fid_out = (*env)->GetStaticFieldID(env, System, "out",
				     "Ljava/io/PrintStream;");
  (*env)->ExceptionDescribe(env);
  out = (*env)->GetStaticObjectField(env, System, fid_out);
  PrintStream = (*env)->FindClass(env, "java/io/PrintStream");
  mid_println = (*env)->GetMethodID(env, PrintStream, "println",
				    "(Ljava/lang/String;)V");
  message = (*env)->NewStringUTF(env, "Hello, World!");
  (*env)->CallVoidMethod(env, out, mid_println, message);

  (*jvm)->DestroyJavaVM(jvm);	/* JVMを破棄 */

  return 0;
}


このプログラムをコンパイルして実行すると「Hello, World!」という文字列がコンソールに出力されます。


[Javaワンポイント]内の前後の記事
→ ネイティブアプリケーションからJavaVMを実行する
ネイティブメソッドで Hello World


■更新日時での前後の記事
8月19日 お天気
→ ネイティブアプリケーションからJavaVMを実行する
アスリート達に学ぶ