1
これは私のいくつかのJavaコードであるとして、java.lang.Stringでインスタンスを渡すための試み:JNIエラー:引数
public class MainTest{
/*
...
*/
public native void invokeByCPlusPlus();
private void appendLine(String... strs){
for(String str : strs) {
System.out.println("get s : " + str);
}
}
}
と私は私のJavaメソッド「appendLine(文字列を呼び出すJNI利用したいです...私はJavaでinvokeByCPlusPlus()メソッドを呼び出すときSTRS)が」: JNIのERROR:
extern "C" void
Java_com_hengye_jnitest_MainTest_invokeByCPlusPlus(JNIEnv *env, jobject instance) {
jclass clazz = env->GetObjectClass(instance);
jmethodID methodId = env->GetMethodID(clazz, "appendLine", "([Ljava/lang/String;)V");
jvalue values[2];
jvalue *val1 = new jvalue();
val1->l = env->NewStringUTF("invoke by C++ 1");
values[0] = *val1;
jvalue *val2 = new jvalue();
val2->l = env->NewStringUTF("invoke by C++ 2");
values[1] = *val2;
env->CallVoidMethodA(instance, methodId, values);
return;
}
を、私はエラーを取得する試みは無効com.hengyeへの引数1として、java.lang.Stringでインスタンスを渡します。 ndktest.MainTest.appendLine(java.lang.String [])
唯一の私は、通常、このようなappendLineメソッドにコードの実行を宣言します。
private void appendLine(String str1, String str2){
System.out.print(str1 + str2);
}
どのように私はこの問題を解決することができますか?
ありがとう、それはいくつかのコードを変更した後に動作します: 'jclass stringClass = env-> FindClass(" java/lang/String "); jobjectArray values = env-> NewObjectArray(3、stringClass、env-> NewStringUTF( "")); ' –