Java Native Interface

Java Native Interface (JNI) ist eine standardisierte Anwendungsprogrammierschnittstelle (API), die die Möglichkeit schafft, aus der Programmiersprache Java heraus Plattform-spezifische Funktionen bzw. Methoden aufzurufen.[1]

Im Gegensatz zu gewöhnlichen Java-Programmen ist ein Java-Programm, das JNI-Aufrufe verwendet, nur dann plattformunabhängig, wenn die native Programmbibliothek auf allen Plattformen verfügbar ist.

Einsatzzweck

JNI ermöglicht es, native Methoden zu schreiben für Situationen, in denen es nicht möglich ist, ausschließlich Java als Programmiersprache einzusetzen. Dies ist der Fall, wenn beispielsweise die Standard-Java-Klassenbibliothek bestimmte plattformabhängige Features oder andere Programmbibliotheken nicht unterstützt. Weiterhin ist es per JNI möglich, eine weitere in einer anderen Programmiersprache programmierte Anwendung für Java zugreifbar zu machen.[1] Viele Klassen der Java-Standardbibliothek basieren auf JNI, um beispielsweise die Datei-Ein- und Ausgabe oder Soundwiedergabe zu ermöglichen. Indem Java Leistungs- und plattformabhängige Implementierungen in die Standardbibliothek integriert, kann der Java-Programmierer und -Nutzer diese Features in sicherer und plattformunabhängiger Weise nutzen.

Gelegentlich wird JNI als Fluchttür (englisch escape hatch) für Java-Entwickler bezeichnet, da es ihnen den Zugriff auf Funktionalitäten ermöglicht, der andernfalls über die Standard-Java-API nicht möglich wäre. Es stellt die Schnittstelle zu anderen Programmiersprachen wie C oder C++ dar.

Mit JNI ist es möglich, Funktionen einer Windows-DLL oder einer shared library unter Linux bzw. Mac OS X, die in C oder C++ programmiert sind, aus Java aufzurufen. Umgekehrt können „native“ Programme Java-Methoden über JNI aufrufen oder eine JVM ausführen.

Java ruft native Methode auf

Um aus Java eine native Methode aufzurufen, muss diese zunächst als „native“ deklariert werden. Zudem muss das Objekt selbst die native Programmbibliothek mit dem Aufruf von „System.loadLibrary("<Name der Bibliothek>")“ laden, bevor die native Methode selbst aufgerufen werden kann.

Das Java-Programm wird übersetzt und anschließend mit dem Softwarewerkzeug javah eine Header-Datei erstellt, die die Funktionsdeklaration vorgibt. Mit dieser Header-Datei kann dann die native Programmbibliothek erstellt werden.

In der nativen Programmbibliothek müssen spezielle Typen für primitive und komplexe Datentypen verwendet werden. Beispielsweise wird für ein Wahrheitswert jboolean verwendet, anstatt der Typ boolean und jdouble für Variablen vom Typ double. Außer den Abbildungen für primitive Typen, existieren auch Abbildungen für komplexe Typen. Zu den primitiven und komplexen Typen zählen folgende:[2]

JNI: Primitive Typen
JNI: Komplexe Typen

Eine der populärsten Anwendungen von JNI ist die Programmbibliothek Standard Widget Toolkit (SWT), die über JNI die Verwendung von Elementen der Grafischen Benutzeroberfläche des Betriebssystems ermöglicht.[3]

Natives Programm ruft Java auf

Aus einem nativen Programm kann Java-Code aufgerufen werden. Dies ist beispielsweise notwendig, um eine enge Verzahnung zwischen Java und dem nativen Programm zu ermöglichen.

Siehe auch

Literatur

  • Rob Gordon: Essential JNI: Java Native Interface. Prentice Hall, 1998, ISBN 0-13-679895-0 (englisch).
  • Sheng Liang: The Java Native Interface: Programmer’s Guide and Specification. Addison-Wesley, 1999, ISBN 0-201-32577-2 (englisch).
  • Alligator Descartes: Java Native Methods. O’Reilly, 2000, ISBN 1-56592-345-6 (englisch).

Einzelnachweise

  1. a b Java Native Interface Specification – Chapter 1: Introduction. In: docs.oracle.com. Abgerufen am 19. Juli 2026 (englisch).
  2. Java Native Interface Specification – Chapter 3: JNI Types and Data Structures. In: docs.oracle.com. Abgerufen am 19. Juli 2026 (englisch).
  3. Steve Northover: SWT: The Standard Widget Toolkit – Part 1: Implementation Strategy for Java Natives. In: eclipse.org. 22. März 2001, abgerufen am 19. Juli 2026 (englisch).

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.