Previous | Next | Trail Map | Using the JNI | Step By Step

Step 3: Create the .h File

In this step, you use the javah utility program to generate a header file (a .h file) from the HelloWorld Java programming language class. The header file provides a function prototype for the implementation of the native method displayHelloWorld() defined in that class.

Run javah now on the HelloWorld class that you created in the previous steps.

By default, javah places the new .h file in the same directory as the .class file.


Note: Use the -d option to instruct javah to place the header files in a different directory.

The name of the header file is the Java programming language class name with a .h appended to the end. For example, the command shown above will generate a file named HelloWorld.h.

The Function Definition

Look at the header file HelloWorld.h.
#includejava example-1dot1/HelloWorld.h
Java_HelloWorld_displayHelloWorld() is the function that provides the implementation for the HelloWorld class's native method displayHelloWorld, which you will write in Step 4: Write the Native Method Implementation. You use the same function signature when you write the implementation for the native method.

If HelloWorld contained any other native methods, their function signatures would appear here as well.

The name of the native language function that implements the native method consists of the prefix Java_, the package name, the class name, and the name of the native method. Between each name component is an underscore "_" separator. The package name is omitted when the method is in the default package. Thus, the native method displayHelloWorld within the HelloWorld class becomes Java_HelloWorld_displayHelloWorld(). In our example, there is no package name because HelloWorld is in the default package.

Notice that the implementation of the native language function, as it appears in the header file, accepts two parameters even though, in its definition in the Java programming language class, it accepts no parameters. The JNI requires every native method to have these two parameters. The first parameter for every native method is a JNIEnv interface pointer. It is through this pointer that your native code accesses parameters and objects passed to it from the Java application. The jobject parameter is a reference to the object itself. For a non-static native method, such as the displayHelloWorld method in our example, this argument is a reference to the object. For static native methods, this argument would be a reference to the method's Java programming language class. In a sense, you can think of the jobject parameter as the "this" variable in the Java programming language. Our example ignores both parameters. The next lesson, Java Native Interface Programming(in the Using the Java Native Interface (JNI) trail) , describes how to access the data using the JNI interface pointer env parameter.


Previous | Next | Trail Map | Using the JNI | Step By Step