java - 调用 CallVoidMethod 时出现 NoSuchMethodError

标签 java c++ java-native-interface nosuchmethoderror jnienv

我正在从我的 jni 类中调用一个非静态函数,但我的游戏得到了

NoSuchMethodError

我已经给出了下面的函数

jni类

void InitializeJni()
{
    cocos2d::JniMethodInfo methodInfo;
    if (! JniHelper::getStaticMethodInfo(methodInfo, CLASS_NAME, "Start", "()V"))
    {
        return ;
    }
    methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID);
    methodInfo.env->DeleteLocalRef(methodInfo.classID);
}

JNIEXPORT void JNICALL Java_com_games_Game_MyClass_nativeObjectCallBack(JNIEnv *env, jobject obj)
{
    jclass cls = env->GetObjectClass(obj);
    jmethodID mid = env->GetMethodID(cls, "Init", "()V");
    if (mid == 0)
        return;
    env->CallVoidMethod(obj, mid);

Java 类

public static native void nativeObjectCallBack();

public void Init()
{
    //my code
}

public static void Start()
{
    ((CYWGameAndroid)CYWUtil.GetInstance().GetContext()).runOnUiThread(new Runnable()
    {
        @Override
        public void run() 
        {
            nativeObjectCallBack();
        }
    });
}

谁能告诉我为什么会这样

这是我的 logcat 输出

01-07 16:53:49.987: D/dalvikvm(11832): GetMethodID: method not found: Ljava/lang/Class;.Init:()V
01-07 16:53:52.049: D/AndroidRuntime(11832): Shutting down VM
01-07 16:53:52.049: W/dalvikvm(11832): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
01-07 16:53:52.109: E/AndroidRuntime(11832): FATAL EXCEPTION: main
01-07 16:53:52.109: E/AndroidRuntime(11832): java.lang.NoSuchMethodError: Init
01-07 16:53:52.109: E/AndroidRuntime(11832):    at com.games.Game.MyClass.nativeObjectCallBack(Native Method)

最佳答案

CallVoidMethod() 应该使用实例参数而不是类 ID 参数调用。

关于java - 调用 CallVoidMethod 时出现 NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14190672/

相关文章:

c++ - 如何在 C++ JNI 中将十进制转换为十六进制

java - Linux 64 位 libjvm.so : file format not recognized

C++——这里是否存在从 Fred* 到 auto_ptr<Fred> 的隐式转换?

c++ - 如何快速将 unsigned char 数组保存到图像文件?

android - 类型无法在 ndk 中解析

java - 进行 JNI 调用时出现 Unsatisfied Link 错误

java - 为什么枚举常量必须在枚举类型中的任何其他变量和方法声明之前声明?

java - Json转excel使用java

java - JAXB 将空的 int XML 属性设置为 0

c++ - 将 unsigned char* 转换为可读字符串以及此函数的作用