Java Native Interface

SKORP79

Grünschnabel
Hallo

habe mir zum ersten Mal ein Java Native Interface gebastelt. Halt das obligatorische 'helloworld', zum Testen. Compilieren war kein Problem. Jedoch habe ich Probleme beim aufrufen der Datei.
Code:
Exception in thread "main" java.lang.NoClassDefFoundError:...
was bedeutet das?

Beim Erstellen des JNI habe ich mich an folgende Anweisungen gehalten:
http://www.haertfelder.com/jni.html
 
Zuletzt bearbeitet:
Deine Klasse wurde nicht gefunden. Entweder ist das Package nicht greifbar (---> CLASSPATH) oder Du hast schlicht weg ein Rechtschreibproblem (Groß-/Kleinschreibung?).
 
Ich denke da könntest du recht haben. Leider stehe ich erst am Anfang meiner Java-Karriere und habe keine Ahnung wie ich den richtigen Classpath angeben muss... :confused:
 
Im Normalfall, wenn du noch nicht mit verschiedenen Packages arbeitest mit:

java -cp . NameDerClassDatei

"." bedeutet dann, dass das aktuelle Verzeichnis in den Classpath aufgenommen wird.
 
Is'n Argument.
Also folgendermaßen: den Code habe ich von der o.g. Seite abgeschrieben und lautet:
Code:
class helloworld {
  private native void callnative();

  public static void main(String[] args)
    {
    new helloworld().callnative();
    }

  static {
    System.loadLibrary("helloworld");
    }
  }

Dann bin ich wieder den Anweisungen dieser Seite gefolgt. Benutzt habe ich dabei das j2sdk-1.4.2_09.
Wenn ich jetzt 'java helloworld' eingebe (im total commander) kommt die folgende Fehlermeldung.
 

Anhänge

  • FehlermeldungEingabe2.jpg
    FehlermeldungEingabe2.jpg
    36,7 KB · Aufrufe: 64
Zuletzt bearbeitet:
Hallo!

1) Klassennamen schreibt man gross auch wenn diese in dem tutorial klein geschrieben waren ...

Bei java gibt es einige Benenungskonnventionen (Sun Java Code conventions -> http://java.sun.com/docs/codeconv/) auf denen einige Mechanismen der Sprache (Reflection...) aufbauen.
Es kann auch sein, dass bei nichteinhalten dieser Konvention das ein oder andere Tool das Code generiert aus dem tritt geraet.

Aber nun zu deinem Problem. Kopiere die Library (helloworld.dll (*)) mal ins Verzeichnis Windows\System32 oder ins bin Verzeichnis des aktiven JRE's. Eine weitere Moeglichkeit waere es noch den java.library.path beim Aufruf explizit zu setzen.
Code:
    java -Djava.library.path=c:/foo de.tutorials.NativeExample
Siehe auch hier:
http://java.sun.com/docs/books/tutorial/native1.1/index.html
und hier:
http://www.inonit.com/cygwin/jni/helloWorld/load.html

(*) die dll muss in dem Fall helloworld.dll heissen, da du sie mit helloworld laedst:
Code:
  static {
   System.loadLibrary("helloworld");
 }



Gruss Tom
 
Zurück