【发布时间】:2013-03-25 18:58:26
【问题描述】:
我在网上找到了很多帖子,但似乎没有一个可以帮助我做对..
我的问题是我想从 ndk c++ 部分调用一个 android java 函数..
当我上课时:
jclass icls = jenv->GetObjectClass(obj);
我收到此错误: E/AndroidRuntime(27397): java.lang.NoSuchMethodError: 在类 Ljava/lang/Class 中没有 name='setValues' signature='()V' 的方法; => jmid == 0
当我用 "FindClass" 像下面这样调用它时,我收到此错误:A/libc(26692): Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1), thread 26743(线程 8302)
findclass 和方法似乎可以工作 (!= 0) 那么 obj 会不会有问题?
有人吗?提前谢谢..
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);
【问题讨论】:
标签: java android c++ android-ndk java-native-interface