当前位置: 首页 > 面试题库 >

JNI如何访问Java对象(整数)

微生德泽
2023-03-14
问题内容

我有一个JNI方法来访问返回一个Integer对象的java方法。我不想返回原始的int类型,因为将修改此代码以处理通用对象。以下是我所拥有的。我无法获得所传递的Integer的值。C
++端的输出类似于

value = 0x4016f3d0

如何获取在C ++端传递的Integer对象的实际值?

请帮忙。

谢谢,

-H

GenericPeer.cpp

JNIEXPORT void JNICALL Java_GenericPeer_print (JNIEnv *jenv, jclass jcls, jobject data){
 jclass peerCls = jenv->GetObjectClass(data);
 jmethodID mGetValue = jenv->GetMethodID(peerCls, "getValue","()Ljava/lang/Integer;");
 if(mGetValue == NULL){
   return (-1);
 } 
 jobject value = jenv->CallObjectMethod(data, mGetValue);
 cout<<"value = "<<value<<endl;

}

GenericPeer.java

public class GenericPeer {
 public static native void print(Data d);
 static {
  System.load("/home/usr/workspace/GenericJni/src/libGenericJni.so");
 }
}

资料库

public class Data {
 private Integer value;
 pubilc Data(Integer v){ 
  this.value = v;
 }
 public Integer getValue() { return value; }
    public void setValue(Integer value) {
 this.value = value;
 }
}

Test.java(主类)

public class Test {
 public static void main(String[] args){
       Integer i = new Integer(1);
  Data d = new Data(i);
  GenericPeer.print(d);
      }
}

问题答案:

您必须intValue在Integer实例上调用该方法以获得其原始值。使用FindClass替代GetObjectClass(如在你的代码),以获得对类java.lang.Integer中的引用,然后GetMethodIDCallObjectMethod实际调用的intValue方法。



 类似资料:
  • 问题内容: 我对JNI相对较新,并且掌握了使用JNI处理Java对象中的整数和数组的基本知识。现在,我正在尝试修改/访问Java对象中的Java对象。 我一直在互联网和Stack Overflow上进行搜索,但还没有找到执行该操作的方法。 这是例子。 在Java中: 在JNI中,如何通过ObjectTwo从ObjectOne访问“ buff”?我尝试过这样的事情… 我做错了什么吗? 问题答案: 在

  • 问题内容: 看一下这个例子: 如何从子对象中访问随机对象? 问题答案: 让类将自己的实例传递给该类。 经典Occam剃刀。

  • 问题内容: 我有以下数组,当我做得到: 我试图按如下方式访问数组: 但这显示了我: 未定义0 注意: 我从 Facebook SDK 4 获得此数组,所以我不知道原始的数组结构。 作为示例,如何访问数组中的值? 问题答案: 要访问或您如何使用两个不同的运算符。 数组 要访问数组元素,您必须使用,或者您不会看到太多,但也可以使用is 。 声明数组和访问数组元素之间的区别 定义数组和访问数组元素是两件

  • 问题内容: 我目前正在使用Node-webkit开发桌面应用程序。在此过程中,我需要从本地MySQL数据库获取一些数据。 查询工作正常,但我不知道如何访问结果。我将它们全部存储在一个数组中,然后将其传递给函数。在控制台中,它们如下所示: 这是查询结构: 如何在函数中检索此内容?值更重要,但是如果我也能得到键,那将是很好的。 问题答案: 原来它们是普通对象,您可以通过访问它们。 RowDataPac

  • 问题内容: 我正在使用类似的东西: 这给了我这样的输出: 我想访问键[0]中的字符串值。当我尝试做类似的事情时: 我收到此错误: 解析错误:语法错误,意外的T_DNUMBER 这两个数字/整数似乎有问题。 问题答案: PHP7.2引入了一种行为上的更改,以转换对象和数组类型转换中的数字键,从而解决了这一特殊的不一致问题,并使以下所有示例的行为均符合预期。 少一件值得困惑的事情! 原始答案(适用于7

  • 也许问题的标题写得不好,但我不明白我还能写些什么。 我想了解,为什么下面两个案例中的第一个能起作用,以及在总体实现相同的情况下,如何让第二个也能起作用。 从代码的角度来看,什么样的原则使第一个按原样工作,也就是说,扩大了可以使用的变量的范围,所以我可以了解更多。 我想访问onclick侦听器中的'obj'变量。 案例1 案例2 我的onclicklistener只接受带有onClick方法的接口,