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

标签 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的正确方法是什么?

最佳答案

native_ptr_ 是一个 long,因此它的签名是 "J"不是 "Lcom/mypkg/utils/attitude_calculator$native_ptr_;"

所以调用应该是:

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

关于java - 不明白为什么 JNIEnv->GetFieldID 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42656258/

相关文章:

java - SoX - java 的声音交换

java - 使用 Guice 启动 @EJB 注入(inject)

java - 找不到适合 AttributedString(java.util.List<java.lang.String>) 的构造函数

java - 如何在速度模板中使用 split()?

java - Spring Controller 是线程安全的吗?

java - JHipster 具有双向一对多关系的子表中的外键为 Null

c++ - JNI 使用静态 NTL 库构建共享库

c++ - 在 Android NDK 中用 C++ 调用 Java 对象 - 使用什么 IDE?

java - JNA从java调用没有源代码的DLL

android - OpenCV opencv2/core/core.hpp : No such file or directory