java.io.Readerから、posix_memalignを使用してCで割り当てられたcharバッファに読み込もうとしています。 C++コードの場合スレッド "main"のJNI GetMethodID例外java.lang.NoSuchMethodError:<method>
私のJavaコードで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));}
}
、私は次のことをやりました。
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);
}
問題は、私はこの方法を取得の目的は、私はC++に割り当てられたバッファに読者から読みたい(私は(アカウントのUTF16に取っていますされ
Calling class is: java.io.StringReader // print_object_class_name(env, obj2);
Exception in thread "main" java.lang.NoSuchMethodError: read
を得るということです16ビット)のバッファを割り当てています。
このバグのために、私はバッファの実装への読み込みがうまくいくかチェックしていません。しかし、いくつかの洞察は傷つくことはありません。
do{
numCharsRead = env->CallIntMethod(obj2, jread_method ,source_ptr ,off , len);
}while(numCharsRead != -1);
どのようにcppヘッダーを生成しましたか? – neohope
javah -jni –
を使用してパッケージ化していない場合は、LowerCaseTokenizer.javaファイルにあります。これを実行してコンパイルして、すぐにテストを実行します。 –