19.01 Anbindung an native Programme

Java ist eine plattformunabhängige Programmiersprache, weshalb Sie in ihr nicht system- und/oder hardwarenah programmieren können. Dennoch ist es manchmal hilfreich, einen Zugriff auf die Systemressourcen zu erhalten. Z. B. wenn Sie ein plattformabhängiges Programm in Kauf nehmen können, aber Java Ihnen mehr als alle anderen (nativen) Sprachen liegt. Oder wenn das Programm prinzipiell plattformunabhängig gestaltet werden soll, aber nur kleine, native Funktionen benötigt werden. In diesem Fall ist es einfacher das komplette Programm in Java zu schreiben und lediglich den plattformabhängigen Code in native Programmbibliotheken auszulagern.

Um so etwas zu realisieren, benötigen Sie eine entsprechende native Schnittstelle zu Ihrem Java-Programm. Diese können Sie z. B. über JNI (Java Native Interface) oder JNA (Java Native Access) realisieren. Der Unterschied zwischen den beiden Bibliotheken liegt darin, dass Sie mit JNA auf bestehende Bibliotheken zugreifen können. Mit JNI programmieren Sie bspw. in C oder C++ eine eigene Bibliothek, und greifen dann von Ihrem Java-Programm auf diese zu. Umgekehrt können Sie natürlich auch aus Ihrer nativen Bibliothek auf Java-Methoden zugreifen oder sogar eine komplette JVM ausführen (Invocation-API).

Da JNI deutlich umfangreicher, unbeschränkter und flexibler als JNA ist, beschäftigt sich dieses Kapitel größtenteils mit JNI. Für dieses Kapitel und um mit JNI arbeiten zu können, benötigen Sie zusätzlich eine entsprechende Entwicklungsumgebung für native Programme (hier eine C/C++-Umgebung wie z. B. gcc) und das Programm javah aus dem bin-Verzeichnis Ihres JDKs. Da JNI mit dem JDK 1.1 eingeführt wurde, müssen Sie sich keine Gedanken machen, dass Sie eine zu alte Java-Version verwenden. Vorher gab es das NMI (Native Methode Interface).

Im nächsten Kapitel werden Sie alles benötigte einrichten, konfigurieren und ein kleines Beispiel-Programm erstellen. Eine sehr detaillierte Übersicht finden Sie auf der JNI Seite von sun.

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.