簡體   English   中英

枚舉的JNI調用方法拋出異常

[英]JNI call method of enum throws exception

我的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM