不明白为什么JNIEnv-> GetFieldID失败

时间:2017-03-07 19:05:47

标签: java java-native-interface

在java中我有:

package com.mypkg.utils;
...

public class attitude_calculator
{
    private long native_ptr_;
    ...
    public native RealMatrix R();
}

在jni层中,我需要访问native_ptr_。以下是我尝试这样做的方法:

JNIEXPORT jobject JNICALL 
Java_com_mypkg_utils_attitude_1calculator_R(JNIEnv *jenv,
                                            jobject jobj)
{
  myns::AttitudeCalculator *nobj = nullptr;
  jlong addr = 0;
  jfieldID jfid = 0;
  jclass jcls;

  jcls = jenv->GetObjectClass(jobj);
  jfid = jenv->GetFieldID(jcls, "native_ptr_",
    "Lcom/mypkg/utils/attitude_calculator$native_ptr_;");
  if (jfid == nullptr || jfid == NULL) {
    ...
  }
  ...
}

调用GetFieldID会产生

java.lang.NoSuchFieldError的。

拨打GetFieldID的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

native_ptr_long,因此其签名为"J" "Lcom/mypkg/utils/attitude_calculator$native_ptr_;"

所以电话应该是:

jfid = jenv->GetFieldID(jcls, "native_ptr_", "J");