Rutgers University Excellence Campaign 2/20/2004 Java Native Interface Tutorial Xiaolin Li Rutgers.

7
Rutgers University Excellence Campaign 2/20/2004 Java Native Java Native Interface Tutorial Interface Tutorial Xiaolin Li Xiaolin Li Rutgers Rutgers

Transcript of Rutgers University Excellence Campaign 2/20/2004 Java Native Interface Tutorial Xiaolin Li Rutgers.

Page 1: Rutgers University Excellence Campaign 2/20/2004 Java Native Interface Tutorial Xiaolin Li Rutgers.

Rutgers University Excellence Campaign2/20/2004

Java Native Interface Java Native Interface TutorialTutorial

Xiaolin LiXiaolin Li

RutgersRutgers

Page 2: Rutgers University Excellence Campaign 2/20/2004 Java Native Interface Tutorial Xiaolin Li Rutgers.

2Rutgers University Excellence Campaign

Motivation

• A seamless bridge between Java and native implementation in C, C++ or other languages

Java Application and Library

JVM JNI

Native ApplicationAnd Library

Host Environment(OS)

Page 3: Rutgers University Excellence Campaign 2/20/2004 Java Native Interface Tutorial Xiaolin Li Rutgers.

3Rutgers University Excellence Campaign

Getting Started

1. Create a Java class that declares the native method

Hello.java2. Compile

(javac)

Hello.class3. Javah –jni

HelloHello.h

4. Write C impl Hello.c

5. Compile C code and generate

native lib

Hello.dll or libhello.so

6. DoneRun the java applicationJava Hello

Page 4: Rutgers University Excellence Campaign 2/20/2004 Java Native Interface Tutorial Xiaolin Li Rutgers.

4Rutgers University Excellence Campaign

Hello World// Hello.javapublic class Hello { static { String libpath =

System.getProperty("java.library.path"); libpath += ":."; System.setProperty("java.library.path", libpath); System.loadLibrary("Hello"); } public static void main(String[] args) { Hello hello = new Hello(); hello.Hello();

} private native void Hello();}

Page 5: Rutgers University Excellence Campaign 2/20/2004 Java Native Interface Tutorial Xiaolin Li Rutgers.

5Rutgers University Excellence Campaign

Hello World

// Hello.c

#include <stdio.h>#include <math.h>#include "Hello.h"

JNIEXPORT void JNICALL Java_Hello_hello(JNIEnv* env, jobject obj)

{ printf("Hello, World.\n");}

Page 6: Rutgers University Excellence Campaign 2/20/2004 Java Native Interface Tutorial Xiaolin Li Rutgers.

6Rutgers University Excellence Campaign

Executable Java Applicationint main(int argc, char * argv[]){ JNIEnv *env; JavaVM *jvm; jint res; jclass cls; jmethodID mid; // 1. create JVM res = JNI_CreateJavaVM(&jvm, (void**) &env, &vm_args); // 2. find and load the Java application cls = (*env)->FindClass(env, "Hello"); mid = (*env)->GetStaticMethodID(env, cls, "main",

"([Ljava/lang/String;)V"); // 3. execute it (*env)->CallStaticVoidMethod(env, cls, mid, args); (*jvm)->DestroyJavaVM(jvm);}

Page 7: Rutgers University Excellence Campaign 2/20/2004 Java Native Interface Tutorial Xiaolin Li Rutgers.

Rutgers University Excellence Campaign2/20/2004

Thank YouThank You