Javah is een applicatie die header-bestanden kan maken uit Java-broncode. Het wordt gebruikt wanneer een Java-programma functies moet aanroepen die in een andere programmeertaal geschreven zijn, bijvoorbeeld in C.

Het aanroepen van functionaliteit uit een andere programmeertaal gaat met de JNI: de Java Native Interface. Om een class een aanroep te laten doen naar een native methode, moet die class een methode bevatten met de native modifier. Dan kan er middels Javah een header-bestand worden aangemaakt.

Javah-voorbeeld

bewerken

In het voorbeeld hieronder wordt voor de class Test een headerfile gemaakt.

public class Test {

   static {
      System.loadLibrary("test");
   }

   public native void test();
}

Deze class moet gecompileerd worden met Javac, en vervolgens dient Javah te worden aangeroepen:

$ javac Test.java

$ javah Test

Javah genereert een header-bestand, zoals hieronder weergegeven.

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Test */

#ifndef _Included_Test
#define _Included_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Test
 * Method:    test
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Test_test
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

De methode Java_Test_test(JNIEnv*, jobject) wordt aangeroepen als de methode test() in de Test class wordt aangeroepen.

bewerken