Search
Součástí Java platformy je rozhraní JNI (Java Native Interface), které umožňuje propojit kód běžící na virtuálním stroji Javy s nativními programy a knihovnami napsanými v jiných programovacích jazycích (např. C). Hlavními výhodami jsou zvýšení výkonu v některých low-level úlohách (např. Math.sqrt(double a)) a umožnění komunikace s hardwarovými zařízeními (Bluetooth, apod.). Nevýhodou je především ztráta platformní nezávislosti, protože takový program využívá knihovny zkompilované pro daný operační systém.
Implementace nativní knihovny a propojení s Javou je znázorněno na obrázku výše. Příklad ilustruje vytvoření C knihovny, která vypisuje text “Hello World!” a její volání z Java aplikace. Celý proces implementace je možné shrnout do několika kroků:
class HelloWorld { static { /* statický inicializátor */ System.loadLibrary("HelloWorld"); /* načtení dynamické knihovny vytvořené v jazyku C */ // System.load("/import/users/mudromar/libhelloWorld.so"); // druha moznost nacteni souboru bez zadavani java.library.path } private native void print(); /* deklarace nativní metody */ public static void main(String[] args) { new HelloWorld().print(); } }
javah -jni HelloWorld
JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject);
-Wl,--add-stdcall-alias -mno-cygwin -shared -m32 -Wall -pedantic
#include <jni.h> #include <stdio.h> #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) { printf("Hello World!\n"); return; }