출처: http://cafe.naver.com/teamdaydream.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=222


1. 일단 자바 소스를 만듭니다.

2. 그리고 컴파일합니다.[ javac HelloWorld.java ]

3. C에서 사용하기 위한 헤더 파일을 얻습니다. [ javah -jni HelloWorld ]

4. 헤더 파일을 기준으로 C코드를 작성합니다.

5. C 파일을 컴파일 합니다.

   cl -I"C:\Program Files\Java\jdk1.6.0\include" -I"C:\Program Files\Java\jdk1.6.0\include\win32" -MD -LD HelloWorld.c

   (따옴표는 'Program Files' 사이의 공백을 포함한 한 문자열임을 나타내기 위해서 집어넣은 것입니다.)

6. 자바 프로그램을 실행합니다. [ java HelloWorld ]




HelloWorld.java


public class HelloWorld

{

   public native void print(String msg);
      static

      {
          System.loadLibrary("HelloWorld");
      }

 

   public static void main(String args[])

   {

       new HelloWorld().print(args[0]);
   }
}





HelloWorld.h


/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    print
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL
Java_HelloWorld_print
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif




HelloWorld.c


//#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj, jstring msg)

{

   jboolean iscopy;
   char *message=(*env)->GetStringUTFChars(env,msg,&iscopy);
   printf("Hello JNI World~~~%s\n",message);
   return;
}




실행 결과


> java HelloWorld HelloWorld

Hello JNI World~~~realwolf






결과를 보면 짐작하시겠지만 자바에서 C로 작성된 함수를 실행하는 예제입니다.

아직 구체적으로 배운 건 없지만 하드웨어 제어에 사용하면 좋을 듯 합니다.

실제 하드웨어를 제어하는 코드를 C로 작성하고 인터페이스는 Java로 제공하는 것이지요.


나중에 기회가 되서 J2ME를 배우게 된다면 뭔가 알 수 있지 않을까하고 막연히 생각만 해봅니다;;

AND