Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.
 
Inhaltsverzeichnis
Vorwort
1 Neues in Java 8 und Java 7
2 Fortgeschrittene String-Verarbeitung
3 Threads und nebenläufige Programmierung
4 Datenstrukturen und Algorithmen
5 Raum und Zeit
6 Dateien, Verzeichnisse und Dateizugriffe
7 Datenströme
8 Die eXtensible Markup Language (XML)
9 Dateiformate
10 Grafische Oberflächen mit Swing
11 Grafikprogrammierung
12 JavaFX
13 Netzwerkprogrammierung
14 Verteilte Programmierung mit RMI
15 RESTful und SOAP-Web-Services
16 Technologien für die Infrastruktur
17 Typen, Reflection und Annotationen
18 Dynamische Übersetzung und Skriptsprachen
19 Logging und Monitoring
20 Sicherheitskonzepte
21 Datenbankmanagement mit JDBC
22 Java Native Interface (JNI)
23 Dienstprogramme für die Java-Umgebung
Stichwortverzeichnis

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java SE 8 Standard-Bibliothek von Christian Ullenboom
Das Handbuch für Java-Entwickler
Buch: Java SE 8 Standard-Bibliothek

Java SE 8 Standard-Bibliothek
Pfeil 22 Java Native Interface (JNI)
Pfeil 22.1 Java Native Interface und Invocation-API
Pfeil 22.2 Eine C-Funktion in ein Java-Programm einbinden
Pfeil 22.2.1 Den Java-Code schreiben
Pfeil 22.3 Dynamische Bibliotheken erzeugen
Pfeil 22.3.1 Die Header-Datei erzeugen
Pfeil 22.3.2 Implementierung der Funktion in C
Pfeil 22.3.3 Die C-Programme übersetzen und die dynamische Bibliothek erzeugen
Pfeil 22.4 Nativ die String-Länge ermitteln
Pfeil 22.5 Erweiterte JNI-Eigenschaften
Pfeil 22.5.1 Klassendefinitionen
Pfeil 22.5.2 Zugriff auf Attribute
Pfeil 22.5.3 Methoden aufrufen
Pfeil 22.5.4 Threads und Synchronisation
Pfeil 22.5.5 @Native Markierungen *
Pfeil 22.6 Einfache Anbindung von existierenden Bibliotheken
Pfeil 22.6.1 JNA (Java Native Access)
Pfeil 22.6.2 BridJ
Pfeil 22.6.3 Generieren von JNI-Wrappern aus C++-Klassen und C-Headern
Pfeil 22.6.4 COM-Schnittstellen anzapfen
Pfeil 22.7 Invocation-API
Pfeil 22.8 Zum Weiterlesen
 
Zum Seitenanfang

22.2Eine C-Funktion in ein Java-Programm einbinden Zur vorigen ÜberschriftZur nächsten Überschrift

Wir wollen in einem kurzen Überblick sehen, wie die Vorgehensweise prinzipiell ist. Dazu werfen wir einen Blick auf die Implementierung einer einfachen Klasse, die lediglich die Länge der Zeichenkette berechnet.

 
Zum Seitenanfang

22.2.1Den Java-Code schreiben Zur vorigen ÜberschriftZur nächsten Überschrift

Zunächst benötigen wir eine Klasse mit einer nativen Java-Methode. Wir haben gesehen, dass dafür der Modifizierer native nötig ist. Die Methode besitzt – wie eine abstrakte Methode – keine Implementierung:

public static native int strlen( String s );

Die statische Methode soll in eine Klasse mit einem statischen Initialisierungsblock eingebettet werden, der die dynamische Bibliothek lädt:

Listing 22.1com/tutego/jni/StrLen.java

package com.tutego.jni;

public class StrLen {
static {
System.loadLibrary( "strlen" );
}
public static native int strlen( String s );
}

Die statische Methode System.loadLibrary(String) delegiert an Runtime.getRuntime().loadLibrary(String), die wir auch hätten nutzen können. Der Name der Bibliothek, "strlen", hat nichts mit dem Namen der Methode zu tun.

[»]Hinweis

Eine dynamische Bibliothek ist an einen Klassenlader gebunden und wird auch entfernt, wenn die Garbage-Collection den Klassenlader entfernt. Dennoch kann dieselbe aktive Bibliothek nur einmal von der JVM geladen werden. Ein zweiter Versuch wird mit einem UnsatisfiedLinkError bestraft.

Eine Beispielklasse soll lediglich unsere statische Methode aufrufen:

Listing 22.2com/tutego/jni/StrLenDemo.java

package com.tutego.jni;

public class StrLenDemo {
public static void main( String[] args ) {
System.out.println( StrLen.strlen("2003 UB313") );
}
}

Suchort der dynamischen Bibliothek

Um bei der Aufforderung mit loadLibrary(String) die dynamische Bibliothek zu finden, wertet die Laufzeitumgebung die Umgebungsvariable LD_LIBRARY_PATH aus. Diese muss unter Umständen noch gesetzt werden. Befinden wir uns im selben Verzeichnis, ist das nicht nötig.

Welche Pfade die Laufzeitumgebung durchsucht, zeigt die folgende einfache Zeile:

System.out.println( System.getProperty("java.library.path") );

Eine Alternative zu System.loadLibrary(String) ist die statische Methode System.load(String). Im Gegensatz zu loadLibrary(String) erwartet load(String) einen absoluten Pfad zur Bibliothek.

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java SE 8 Standard-Bibliothek Java SE 8 Standard-Bibliothek
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Java ist auch eine Insel
Java ist auch eine Insel


Zum Rheinwerk-Shop: Professionell entwickeln mit Java EE 8
Professionell entwickeln mit Java EE 8


Zum Rheinwerk-Shop: Besser coden
Besser coden


Zum Rheinwerk-Shop: Entwurfsmuster
Entwurfsmuster


Zum Rheinwerk-Shop: IT-Projektmanagement
IT-Projektmanagement


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2018
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern