工作我已經發現了很多帖子在網上,但他們不似乎幫助我得到它的權利..調用從C++(JNI)的Java功能不包括在所有
我的問題是,我想調用距離NDK C++一部分的Android的Java功能..
當我拿到類:
jclass icls = jenv->GetObjectClass(obj);
我得到這個錯誤: E/AndroidRuntime(27397):java.lang.NoSuchMethodError :在類Ljava/lang/Class中沒有name ='setValues'簽名='()V'的方法; => jmid == 0
當我這樣稱呼它下面「findClass的」我得到這個錯誤:A/libc的(26692):在0x00000004致命信號11(SIGSEGV)(代碼= 1) ,螺紋26743(螺紋8302)
的的findClass和方法似乎工作(!= 0),所以可以有與OBJ一個問題嗎?
有人嗎? Thx提前..
JAVA - 主類:
package com.new.test;
class Test{
public Test(Context context, AttributeSet attrs) {
super(context, attrs);
run();
}
run(){
int x = 10;
new DoStuff(x);
}
public void setValues(){
Log.e("","SET VALUES");
}
}
JAVA 2 JNI:
public class DoStuff{
public DoStuff(int x){
nativeDoStuff(x);
}
private static native long nativeDoStuff(int x);
static{
System.loadLibrary("do_stuff");
}
}
C++:CPP
JNIEXPORT void JNICALL Java_com_new_test_DoStuff_nativeDoStuff (JNIEnv * jenv, jobject obj, jint x){
jclass icls = jenv->FindClass("com/new/test/Test");
//jclass icls = jenv->GetObjectClass(obj);
jmethodID jmid = jenv->GetMethodID(icls, "setValues","()V");
jenv->CallVoidMethod(obj,jmid);
}
C++:H
JNIEXPORT void JNICALL Java_com_new_test_DoStuff_nativeDoStuff (JNIEnv *, jobject, jint);
THX很多!從來沒有想過這件事,因爲它以前工作過(當然,因爲我哈哈d沒有使用obj)。 我將所有內容都移動到了Test並從nativeDoStuff()中移除了靜態。這是否有任何缺點?我用它使靜態,因爲它是這樣的opencv。 – ddd 2013-03-26 09:38:36
靜態方法的調用開銷略少(不要傳遞'this')。但是在某些時候,您可能需要'this'來回調Java。你的來電。 – 2013-03-26 14:50:49