Hi Leute,
da ich wieder mal das Problem mit den JNI's hatte und ewig lang brauche ne vernünftige Anleitung zu
finden habe ich mir gedacht ich mach mal selber was.
Damit ihr auch was davon habt poste ich sie hier.
Schritt für Schritt Anleitung zum Erstellen eines JNI's (Java Native Interfaces)
Übersicht:
1. Ein Java Programm schreiben. Diese Klasse enthält die deklarierte native Methode.
2. Kompilieren der Java-Klasse welche die Main- und die Native Methode enthält
3. Generieren der Header-Datei für die Native Methode. Dazu wird javah mit der Flag -jni benutzt.
4. Schreiben der Implementierung der Native Methode in einer Programmier-sprache wie z.B. C oder C++.
5. Kompilieren der Header- und der Implementierungsdatei in ein shared library file.
6. Ausführen des Java Programms.
Schritt 1: Schreiben des Javacodes.
Schritt 2: Kompilieren des Javacodes.
Schritt 3: .h File erzeugen(Headerdatei)
Schritt 4: Schreiben der Implementierung der Native Methode
Schritt 5: Erzeugen der Shared Library
Schritt 6: Ausführen des Programms
Schritt 1: Schreiben des Javacodes.
Der folgende Javacode definiert eine Klasse namens HelloWorld. Diese Klasse deklariert eine Native Methode und implementiert die Main-Methode.
Sobald eine Methode aus einer anderen Sprache implementiert wird, muss das Schlüsselwort native verwendet werden.
[java=4]
public native void displayHelloWorld();
[/code]
Das Runtime Environment läd später die dll in die Java Klasse die sie benötigt.
Die HelloWorld Klasse benutzt die System.loadLibrary Methode. Diese Methode läd die dll in das Programm.
Schritt 2: Kompilieren des Javacodes
Benutze den Javacompiler um die Klasse zu kompilieren welche Sie im Schritt vorher erstellt haben.
Javac HelloWorld.java
Schritt 3: .h File erzeugen
In diesem Schritt nutzen Sie das javah Programm um das Headerfile zu erzeugen.
Das Headerfile wird folgendermaßen erzeugt:
Javah -jni HelloWorld
Das erzeugte Headerfile:
Die Java_HelloWorld_displayHelloWorld - Funktion stellt die Schnittstelle zur nativen Methode displayHelloWorld in der Klasse HelloWorld zur Verfügung.
Der Aufbau des Funktionsnamen Java_HelloWorld_displayHelloWorld setzt sich folgendermaßen zusammen:
Java_, der Packetname, der Klassenname, Name der Native Methode. Zwischen jeden dieser Komponenten muss ein Unterstrich sein "_".
In diesem Beispiel wird kein Paketname benötigt, da sich die Dateien im default Paket befinden, welches keinen Namen hat.
Schritt 4: Schreiben der Implementierung der Native Methode
Nun wird die Schnittstelle für die Native Methode geschrieben. Hier die in C geschriebene Schnittstelle für die Native Methode Java_HelloWorld_displayHelloWorld
Diese Schnittstelle befindet sich in der Datei HelloWorldImp.c:
Schritt 5: Erzeugen der Shared Library
In Schritt eins wurde durch
die Shared Library ins Java-programm eingebunden. In Windows wird eine dll-Datei erstellt. Nun erstellen wir diese. Sie können mit dem Compiler von Windows die Shared Library mit folgenden Kommando erzeugen.
Schritt 6: Ausführen des Programms
Jetzt können Sie das Programm mit dem Java Interpreter ausführen.
Nun sollten Sie folgende Ausgabe sehen:
Wenn Sie die folgende Fehlermeldung bekommen, haben Sie den Library Pfad nicht richtig gesetzt.
Ich hoffe mit dieser kurzen Anleitung somanchen von euch geholfen zu haben.
Also viel Spaß und Erfolg damit.
MFG
SammY
da ich wieder mal das Problem mit den JNI's hatte und ewig lang brauche ne vernünftige Anleitung zu
finden habe ich mir gedacht ich mach mal selber was.
Damit ihr auch was davon habt poste ich sie hier.
Schritt für Schritt Anleitung zum Erstellen eines JNI's (Java Native Interfaces)
Übersicht:
1. Ein Java Programm schreiben. Diese Klasse enthält die deklarierte native Methode.
2. Kompilieren der Java-Klasse welche die Main- und die Native Methode enthält
3. Generieren der Header-Datei für die Native Methode. Dazu wird javah mit der Flag -jni benutzt.
4. Schreiben der Implementierung der Native Methode in einer Programmier-sprache wie z.B. C oder C++.
5. Kompilieren der Header- und der Implementierungsdatei in ein shared library file.
6. Ausführen des Java Programms.
Schritt 1: Schreiben des Javacodes.
Schritt 2: Kompilieren des Javacodes.
Schritt 3: .h File erzeugen(Headerdatei)
Schritt 4: Schreiben der Implementierung der Native Methode
Schritt 5: Erzeugen der Shared Library
Schritt 6: Ausführen des Programms
Schritt 1: Schreiben des Javacodes.
Der folgende Javacode definiert eine Klasse namens HelloWorld. Diese Klasse deklariert eine Native Methode und implementiert die Main-Methode.
Java:
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
[java=4]
public native void displayHelloWorld();
[/code]
Das Runtime Environment läd später die dll in die Java Klasse die sie benötigt.
Die HelloWorld Klasse benutzt die System.loadLibrary Methode. Diese Methode läd die dll in das Programm.
Schritt 2: Kompilieren des Javacodes
Benutze den Javacompiler um die Klasse zu kompilieren welche Sie im Schritt vorher erstellt haben.
Javac HelloWorld.java
Schritt 3: .h File erzeugen
In diesem Schritt nutzen Sie das javah Programm um das Headerfile zu erzeugen.
Das Headerfile wird folgendermaßen erzeugt:
Javah -jni HelloWorld
Das erzeugte Headerfile:
Code:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
Die Java_HelloWorld_displayHelloWorld - Funktion stellt die Schnittstelle zur nativen Methode displayHelloWorld in der Klasse HelloWorld zur Verfügung.
Der Aufbau des Funktionsnamen Java_HelloWorld_displayHelloWorld setzt sich folgendermaßen zusammen:
Java_, der Packetname, der Klassenname, Name der Native Methode. Zwischen jeden dieser Komponenten muss ein Unterstrich sein "_".
In diesem Beispiel wird kein Paketname benötigt, da sich die Dateien im default Paket befinden, welches keinen Namen hat.
Schritt 4: Schreiben der Implementierung der Native Methode
Nun wird die Schnittstelle für die Native Methode geschrieben. Hier die in C geschriebene Schnittstelle für die Native Methode Java_HelloWorld_displayHelloWorld
Diese Schnittstelle befindet sich in der Datei HelloWorldImp.c:
Code:
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
Schritt 5: Erzeugen der Shared Library
In Schritt eins wurde durch
Code:
System.loadLibrary("hello")
- Cl –Ic:\java\include –Ic:\java\include\win32 -LD HelloWorldImp.c -Fehello.dll
Schritt 6: Ausführen des Programms
Jetzt können Sie das Programm mit dem Java Interpreter ausführen.
- Java HelloWorld
Nun sollten Sie folgende Ausgabe sehen:
Hello World!
Wenn Sie die folgende Fehlermeldung bekommen, haben Sie den Library Pfad nicht richtig gesetzt.
Ich hoffe mit dieser kurzen Anleitung somanchen von euch geholfen zu haben.
Also viel Spaß und Erfolg damit.
MFG
SammY
Zuletzt bearbeitet von einem Moderator: