Ich habe eine einfache Java-Klasse ("MainX"), die ich mit einem Shell-Skript und Eclipse kompiliere. Wenn ich die Funktion env- & gt; FindClass ("MainX") aufruft, gibt die aus dem Skript generierte MainX.class-Datei null zurück, während die von eclipse erzeugte MainX.class-Datei die Klasse zurückgibt und danach die runMainX-Funktion ausführt.
Die generierte MainX.class-Datei befindet sich im selben Ordner wie die ausführbare JNI-C ++ - Datei.
MainX.java
%Vor%JNIBinding.cpp
%Vor%Könnte mir jemand erklären, warum das passiert?
Ich schätze jede Hilfe.
Irgendeine Idee ??? Vielen Dank im Voraus
Aus der JNI-Dokumentation für FindClass
:
Wenn Sie also davon ausgehen, dass die Klasse im Paket your.package.name
enthalten ist, müssen Sie vermutlich
mit
%Vor%Hoffe, das hilft!
Ich bin mir nicht sicher über dieses Problem auf Ihrer Plattform, aber ich hatte ein ähnliches Problem auf der Android-Plattform.
Die FindClass-Methode sollte nur vom Java-Thread aufgerufen werden. Die FindClass-Implementierung sucht nach einem ClassLoader, indem sie den aktuellen Call-Stack durchläuft. Da Sie versuchen, die FindClass von einem nativen Thread aus aufzurufen, müssen Sie nicht nach ClassLoader suchen. Werfen Sie einen Blick auf diese JNI-FAQ :
%Vor%Wenn der Klassenname richtig aussieht, könnten Sie in eine Klasse geraten Ladeproblem. FindClass möchte die Klassensuche in der Klasse starten Loader mit Ihrem Code verbunden. Es untersucht den Call-Stack, der sieht etwa so aus:
Die oberste Methode ist Foo.myfunc. FindClass findet den ClassLoader Objekt, das mit der Foo-Klasse verknüpft ist und dieses verwendet.