Native Methoden werden mit der Methode System.loadLibrary geladen. Im folgenden Beispiel lädt die Methode zur Klasseninitialisierung eine plattformspezifische native Bibliothek, in der die native Methode f definiert ist:
Das Argument für System.loadLibrary ist ein vom Programmierer beliebig gewählter Bibliotheksname. Das System geht nach einem standardmäßigen, plattformspezifischen Ansatz vor, um den Bibliotheksnamen in den Namen einer nativen Bibliothek zu konvertieren. So wandelt ein Solaris-System den Namen pkg_Cls beispielsweise in libpkg_Cls.so um, während ein Win32-System denselben Namen in pkg_Cls.dll umformt.
Dynamische Binder lösen Einträge nach ihren Namen auf. Der Name einer nativen Methode wird dabei aus einzelnen Komponenten zusammengesetzt: dem Präfix Java_, einem verkürzten, vollständig qualifizierten Klassennamen sowie einem verkürzten Methodennamen.
Anmerkung: Microsofts JVM-Implementierung verfügt über einen ähnlichen Mechanismus zum Aufruf von nativem Windows-Code über Java, das so genannte Raw Native Interface (RNI).
Zuordnung von Datentypen
Grundtypen wie Integer, Character und andere werden einfach zwischen Java und dem nativen Code kopiert. Sonstige Java-Objekte werden hingegen per Referenz übergeben.
Folgende Tabelle zeigt die Zuordnung von Datentypen zwischen Java und nativem Code. Diese Typen sind austauschbar. Man kann also jint anstatt int verwenden und umgekehrt, ohne dass dazu eine Typumwandlung erforderlich wäre.
|
Allerdings funktioniert die Zuordnung zwischen Java-Strings und
-Arrays und nativen Strings und Arrays anders. Falls man einen jstring verwendet, wo eigentlich ein char * erwartet wird, kann der Code die JVM zum Absturz bringen. Hier ein Beispiel, wie man korrekt mit Strings arbeitet:
Java-Objekte verarbeitet man immer mit dem Interface-Zeiger env.
Fazit
Es ist nicht besonders leicht, das JNI in einer eigenen Anwendung zu implementieren. Allerdings sprechen dessen Performance, die Fähigkeit zur Weiterverwendung von vorhandenem Code und die Möglichkeit, seine Java-Anwendung um zusätzliche Funktionen zu erweitern, durchaus dafür, sich dieser Herausforderung zu stellen. Weitere Informationen sind auf der JNI-Homepage zu finden.
Page: 1 2
Höchste Zeit für eine schnelle Kupfer-Glas-Migration. Bis 2030 soll in Deutschland Glasfaser flächendeckend ausgerollt sein.
Schon im April 2025 soll Android 16 den Status Plattformstabilität erreichen. Entwicklern gibt Google danach…
Die Hintermänner setzen KI-Chatbot-Tools als Köder ein. Opfer fangen sich den Infostealer JarkaStealer ein.
Vernetzte Produkte müssen laut Cyber Resilience Act über Möglichkeiten zur Datenverschlüsselung und Zugangsverwaltung verfügen.
Das jüngste Update für Windows, macOS und Linux stopft drei Löcher. Eine Anfälligkeit setzt Nutzer…
Zwei von Google-Mitarbeitern entdeckte Schwachstellen werden bereits aktiv gegen Mac-Systeme mit Intel-Prozessoren eingesetzt. Sie erlauben…