Native Method example using JNI

Trivial JNI example

  1. Declare your native methods in an otherwise normal Java class.
    public class nativetest
    {
    	public native String sayHello(String s);
    	public static void main(String[] argv)
    	{
    		String retval = null;
    		nativetest nt = new nativetest();
    		retval = nt.sayHello("Beavis");
    		System.out.println("Invocation returned " + retval);
    	}
    }
    
  2. javac nativetest.java
    Standard Java compile
  3. javah -jni nativetest
    Generates .h files. Here is the code.
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include 
    /* Header for class nativetest */
    
    #ifndef _Included_nativetest
    #define _Included_nativetest
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     nativetest
     * Method:    sayHello
     * Signature: (Ljava/lang/String;)Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_nativetest_sayHello
      (JNIEnv *, jobject, jstring);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    
  4. Write your native code, using the .h file generated above Copy the function prototype from the .h file and paste it in.
    #include "nativetest.h"	/*double quotes tells it to search current directory*/
    
    JNIEXPORT jstring JNICALL Java_nativetest_sayHello
      (JNIEnv *env, jobject thisobject, jstring js)
    
    {
    	return js;
    }
    
  5. Compile
    cl -c /Ic:\jdk1.1.6\include /Ic:\jdk1.1.6\include\win32 nativetest.c 
    link /libpath=c:\jdk1.1.6\lib nativetest.obj /dll
    
    The above uses Microsoft Visual C++ command-line tools.
  6. Modify your Java class to load the library.
    public class nativetest
    {
    	static {
    		System.loadLibrary("nativetest");
    	}
    	public native String sayHello(String s);
    	public static void main(String[] argv)
    	{
    		String retval = null;
    		nativetest nt = new nativetest();
    		retval = nt.sayHello("Beavis");
    		System.out.println("Invocation returned " + retval);
    	}
    }
    
  7. run the example
    C:\jni\hello>java nativetest
    Invocation returned Beavis
    

The files:

nativetest.java

nativetest.c