如何解决枚举的JNI调用方法抛出异常
我的Java代码中包含以下枚举:
package jni;
public enum Codec2Mode {
CODEC2_MODE_3200(0),CODEC2_MODE_2400(1),CODEC2_MODE_1600(2),CODEC2_MODE_1400(3),CODEC2_MODE_1300(4),CODEC2_MODE_1200(5),CODEC2_MODE_700C(8),CODEC2_MODE_450(10),CODEC2_MODE_450PWB(11);
private int m_code;
public int getCode()
{
return m_code;
}
Codec2Mode( int code )
{
m_code = code;
}
}
我需要将其传递给JNI并使用getCode()
返回的值。为此,我宣布
public native void initialize(Codec2Mode mode);
这是我尝试在C ++端访问它的方式:
JNIEXPORT void JNICALL Java_jni_Codec2Wrapper_initialize
(JNIEnv * env,jobject,jobject mode)
{
jclass enumClass = env->FindClass("jni/Codec2Mode");
jmethodID getCodeMethod = env->GetMethodID(enumClass,"getCode","(V)I");
jint value = env->CallIntMethod(mode,getCodeMethod);
std::cout << "Arg = " << value << std::endl;
}
从Java中,我叫codec2.initialize(Codec2Mode.CODEC2_MODE_2400);
。但是我遇到了分割错误。这里可能有什么问题?
解决方法
您的签名不正确:
jmethodID getCodeMethod = env->GetMethodID(enumClass,"getCode","(V)I");
它应显示为:"()I"
这是在您的班级中定义的方式。
public int getCode();
descriptor: ()I
您可以获得类似方法的签名
> javap -cp . -s -p jni.Codec2Mode
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。