如何使用jvalue数组将两个int传递给构造函数?

时间:2013-10-10 15:36:02

标签: java c java-native-interface

我正在尝试创建一个对象的实例,该对象具有一个构造函数,该构造函数通过将整数作为jvalue数组的成员传递而获取两个整数。当我从构造函数中打印参数时,似乎只有第一个参数正确传递,为什么会这样?我的C和Java代码如下。

C代码

jclass theClass;
jmethodID theMethod;
theClass = (*env)->FindClass(env, "thepackage/TwoNumbers");
theMethod = (*env)->GetMethodID(env, theClass, "<init>", "(II)V");

jvalue args[2];
args[0].i=55;
args[1].i=6;

jobject theObj = (*env)->NewObject(env, theClass, theMethod, *args);

Java代码

package thepackage;
public class TwoNumbers {
    int a;
    int b;

    TwoNumbers(int first, int second) {
        this.a=first;
        this.b=second;
        System.out.println("A is "+first+" and b is "+second);
    }
}

1 个答案:

答案 0 :(得分:2)

您正在调用函数NewObject,该函数采用可变长度参数列表。要使用jvalue参数版本,您必须调用NewObjectA

jobject theObj=(*env)->NewObjectA(env,theClass,theMethod,*args);

请参阅Documentation - NewObject