Ich versuche, Von java.io.Reader zu einem Zeichenpuffer zu lesen, der in C mit posix_memalign zugewiesen wurde.JNI GetMethodID Ausnahme im Thread "main" java.lang.NoSuchMethodError: <method>
In meinem Java-Code
public class LowerCaseTokenizer
{
public native void Initialize(Reader input) throws IOException;
public static String example = "XY&Z Corporation - [email protected]";
public LowerCaseTokenizer(Reader input) throws IOException {
Initialize(input);
}
public static void main(String[] args) throws IOException {
System.loadLibrary("LowerCaseTokenizer");
LowerCaseTokenizer sample = new LowerCaseTokenizer(new StringReader(example));}
}
Für den C++ Code, habe ich die folgenden.
JNIEXPORT void JNICALL Java_LowerCaseTokenizer_Initialize(JNIEnv *env, jobject obj1, jobject obj2){
jclass input_class = env->GetObjectClass(obj2);
jmethodID jread_method = env->GetMethodID(input_class, "read", "(C[II)I");
print_object_class_name(env, obj2);
}
Das Problem ist, dass ich
Calling class is: java.io.StringReader // print_object_class_name(env, obj2);
Exception in thread "main" java.lang.NoSuchMethodError: read
Der Zweck dieser Methode des Erhaltens, die ich von einem Leser auf einen Puffer lesen möchten, die in C zugeordnet ist ++ (I Rechnung UTF16 nehme (16 Bit) pro Char Problem beim Zuweisen des Puffers).
Aufgrund dieses Fehlers habe ich nicht überprüft, ob das Lesen der Pufferimplementierung funktioniert. Aber einige Einsichten werden nicht schaden.
do{
numCharsRead = env->CallIntMethod(obj2, jread_method ,source_ptr ,off , len);
}while(numCharsRead != -1);
Wie haben Sie den cpp-Header generiert? – neohope
mit javah-jni –
habe es nicht verpackt, es befindet sich in LowerCaseTokenizer.java Datei, die ich ausführen und kompilieren und sofort für schnellere Tests laufen. –