Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hab jetzt alles soweit hinbekommen.
Bekomm nur noch den bekannten UnsatisfiedLink error.
Ich poste mal meine Dateien vielleicht erkennt ihr den fehler.
Hier die Java-Datei:
Code:
public class JNI_Ausgabe{
public native String Ausgabe(int i);
public static void main(String[] args){
new JNI_Ausgabe().Ausgabe(10);
}
static {
System.loadLibrary("c_ausgabe");
}
}
import java.util.Date;
public class Boottime
{
static
{
System.loadLibrary("boottime");
}
private static native long getTickCount();
public static Date getBoottime()
{
return new Date(System.currentTimeMillis()-Boottime.getTickCount());
}
public static void main(String argv[])
{
System.out.println(getBoottime());
}
}
Vielen Dank für eure Hilfe. Habs auch schon hinbekommen.
Ich hab vor eine kleine Anleitung dazu zu schreiben.
Könnte man die dann vielleicht zu den FAQs hier im Forum stellen, weil dieses Thema ja öfter gebraucht wird und immer wieder die gleichen Fehler auftreten.
Wer weis denn an wen ich mich da wenden muss?? ???:L
Wenn man einfach die IDE nimmt, anstatt auf der Konsole rumzuhacken ist das eigentlich kein Problem
Aber kannst ruig machen, können wir dann reinhängen!
Ich persönlich würde mich über eine Linux FAQ für JNI freuen, da ich noch nie eine .so Datei zum Laufen gebracht habe, bzw noch nie etwas mit dem gcc Compilier geschafft habe (weder in Linux noch Windows).
Da gibts halt ne Schritt-für-Schritt Anleitung, wo u.a. auch erklärt wird, wie man mit der Konsole und der cl.exe die DLL erzeugt. Aber man kann natürlich auch die IDE verwenden, klar.
Das gleiche Problem hatte ich auch. Hab mit dem gcc nichts zum Laufen gebracht. Wenn ich damit dann fertig bin versuch ich das ganze mal unter Linux zum Laufen zu bringen.
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 Me-thode.
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 dekla-riert eine Native Methode und implementiert die „Main“ Methode.
Code:
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
Sobald eine Methode aus einer anderen Sprache implementiert wird, muss das Schlüsselwort native verwendet werden.
Code:
public native void displayHelloWorld();
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 fol-gendermaßen zusammen:
Java_, der Packetname, der Klassenname, Name der „Native“ Methode. Zwischen jeden dieser Komponenten muss ein Unterstrich sein “_“.
In diesem Beispiel wird kein Packetname benötigt da sich die Dateien im default Pa-cket befinden, welcher 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 ge-schriebene Schnittstelle für die „Native“ Methode Java_HelloWorld_displayHelloWorld
Diese Schnittstelle befindet sich in der Datei HelloWorldImp.c:
In Schritt eins wurde durch System.loadLibrary(„hello“) 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.