Tananyag‎ > ‎Java‎ > ‎

JNI (Java Native Interface)

A JNI átjárót biztosít a Java és a C/C++ között. Használata nagyon ritkán javasolt, de néha mégis megkerülhetetlen. Bizonyos funkciókra lehet, hogy nincs mód csak a Java használatával, különösen hardverspecifikus esetekben (pl. Bluetooth, grafikus kártya, …), ilyen esetekben segíthet egy más nyelven írt kód használata. Illetve néhány esetben nagyon komoly teljesítményre van szükség, ilyenkor így lehet kibújni a Java "szigora" alól.

Használata röviden

  1. Javában deklarálj egy metódust native prefixszel:
    public static native myMethod(int a, String b);
  2. Ehhez generálj egy C/C++-os headert a javah használatával (pl. myheader.h). Ebben a headerben  lesz minden native metódusodhoz egy fejléc. A header fájlt helyezd majd bele a C/C++ projektbe!
  3. Hozz létre egy C/C++ projektet, ami egy Dynamic Library-t készít.
  4. Hozz létre egy C/C++-os forrásfájlt (.c v .cpp), inklúdold be a generált headert (#include "myheader.h", ha a fájl jó helyen van)
  5. A fordításhoz be kell állítani pár dolgot, az Include Path-hoz hozzá kell adni két új elemet, a $JAVA_HOME/include-ot és $JAVA_HOME/include/[linux vagy win32]. (Arch Linuxon a $JAVA_HOME értéke /usr/lib/jvm).
  6. Fontos, hogy a fordítási cél architektúra megfelelő legyen! Linux/Windows, 64/32 bites, ez utóbbi a JVM-től függően.
  7. A fordítás eredménye egy .so fájl lesz (Windowson .dll).
  8. Most már csak Javában kell betölteni az elkészült .so-t vagy .dll-t. Egy class{…}-on belüli static blokkban (az osztály betöltésekor fut le) hívd meg a System.load("/megfelelő/elérési/útvonal/lib.so")-t a megfelelő elérési útvonallal:
    static {
        System.load("/megfelelő/elérési/útvonal/lib.so");
    }

NetBeansben

További hasznos linkek