The third step is to create a C/C++ header file that defines native function signatures. One
way to do this is to use the native method C stub generator tool, javah.exe, which comes with
the SDK. This tool is designed to create a header file that defines C-style functions for each
native method it finds in a Java source code file. The command to use here is:
javah Sample1
Results of running javah.exe on Sample1.java
Sample1.h, below, is the C/C++ header file generated by running the javah tool on our Java
code:
1. /* DO NOT EDIT THIS FILE - it is machine generated */
2. #include <jni.h>
3. /* Header for class Sample1 */
4.
5. #ifndef _Included_Sample1
6. #define _Included_Sample1
7. #ifdef __cplusplus
8. extern "C" {
9. #endif
10.
11. JNIEXPORT jint JNICALL Java_Sample1_intMethod
12. (JNIEnv *, jobject, jint);
13.
14. JNIEXPORT jboolean JNICALL Java_Sample1_booleanMethod
15. (JNIEnv *, jobject, jboolean);
16.
17. JNIEXPORT jstring JNICALL Java_Sample1_stringMethod
18. (JNIEnv *, jobject, jstring);
19.
20. JNIEXPORT jint JNICALL Java_Sample1_intArrayMethod
21. (JNIEnv *, jobject, jintArray);
22.
23. #ifdef __cplusplus
24. }
25. #endif
26. #endif
About the C/C++ header file
As you've probably noticed, the C/C++ function signatures in Sample1.h are quite different
from the Java native method declarations in Sample1.java. JNIEXPORT and JNICALL are
compiler-dependent specifiers for export functions. The return types are C/C++ types that
map to Java types. These types are fully explained in Appendix A: JNI types on page 28
The parameter lists of all these functions have a pointer to a JNIEnv and a jobject, in
addition to normal parameters in the Java declaration. The pointer to JNIEnv is in fact a
pointer to a table of function pointers. As we'll see in Step 4, these functions provide the
various faculties to manipulate Java data in C and C++.
The jobject parameter refers to the current object. Thus, if the C or C++ code needs to
refer back to the Java side, this jobject acts as a reference, or pointer, back to the calling
ibm.com/developerWorks
Presented by developerWorks, your source for great tutorials
Page 6 of 30 Java programming with JNI