Overview
Writing a Java Program with Native Methods
Step 1: Write the Java Code
class HelloWorld
{
// Declare a Native Method
public native void jasonmel1();
public native void jasonmel2(int i, String s);
// Load the Library
static
{
System.loadLibrary("hello");
}
// Write the Main Method
public static void main( String[] args )
{
new HelloWorld().jasonmel1();
new HelloWorld().jasonmel2(123, new String("Test"));
}
}
Step 2: Compile the Java Code
javac HelloWorld.java
Step 3: Create the .h File
javah -jni HelloWorld
Step 4: Write the Native Method Implementation
HelloWorldImp.c:
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_jasonmel1(JNIEnv *env, jobject obj)
{
printf("jasonmel1!\n");
return;
}
JNIEXPORT void JNICALL
Java_HelloWorld_jasonmel2(JNIEnv *env, jobject obj, jint i, jstring s)
{
const char *str = (*env)->GetStringUTFChars(env, s, 0);
printf("jasonmel2: %d %s!\n", i, str);
(*env)->ReleaseStringUTFChars(env, s, str);
return;
}
Step 5: Create a Shared Library
On Solaris:
cc -G -I/usr/local/java/include -I/usr/local/java/include/solaris HelloWorldImp.c -o libhello.so
On MS Windows VC:
cl -Ic:\java\include -Ic:\java\include\win32 -LD HelloWorldImp.c -Fehello.dll
On Linux:
gcc -shared -I/usr/java/jdk1.5.0_07/include/ -I/usr/java/jdk1.5.0_07/include/linux/ HelloWorldImp.c -o libhello.so
On Mac OS X:
gcc -c -I/System/Library/Frameworks/JavaVM.framework/Headers/ HelloWorldImp.c
gcc -dynamiclib -o libhello.jnilib HelloWorldImp.o -framework JavaVM
Step 6: Run the Program
java HelloWorld
Remember to set up library path!
[Top]
Links