Java JNI SetDoubleArrayRegion问题

Java JNI SetDoubleArrayRegion问题,java,c,arrays,java-native-interface,Java,C,Arrays,Java Native Interface,我试着看了很多论坛,尽管做了很多调整和重新分析,我还是有点卡住了 我试图通过JNI从我的C++代码中返回JDouLeLee,但是我似乎要输入的值似乎并没有被执行。这是密码 jdoubleArray ret = env->NewDoubleArray(2); jdouble* rotationsJ = (jdouble *) malloc(2*sizeof(jdouble)); rotationsJ[0] = 4; //whatever, some dummy values. ro

我试着看了很多论坛,尽管做了很多调整和重新分析,我还是有点卡住了

我试图通过JNI从我的C++代码中返回JDouLeLee,但是我似乎要输入的值似乎并没有被执行。这是密码

    jdoubleArray ret = env->NewDoubleArray(2);

jdouble* rotationsJ = (jdouble *) malloc(2*sizeof(jdouble));
rotationsJ[0] = 4; //whatever, some dummy values.
rotationsJ[1] = 4;

cout<<"Rotations 0..."<<rotationsJ[0]; //Java console tells me this is 4, as it should.
env->SetDoubleArrayRegion(ret, 0, 2, (const jdouble*)rotationsJ);

return  ret; 
//EDIT - my java code looks like the following 
    double[] rotations = new double[2];

    rotations = pnMain.rotateLeftRight(true); //PNMain is the calling class, rotateLeftRight returns a jDoubleArray. 
//Was wondering if my Java declaration of rotations is needed?
jdoubleArray ret=env->NewDoubleArray(2);
jdouble*旋转j=(jdouble*)malloc(2*sizeof(jdouble));
旋转j[0]=4//不管怎样,一些虚拟值。
旋转j[1]=4;

cout您对JNI的使用看起来是正确的。Java代码中不需要“newdouble[2]”,因为您可以立即用rotateLeftRight的返回值替换该值


如果将“jdouble”赋值处理为整数类型而不是双精度浮点,则可能发生这种情况。例如,如果将整数4的64位模式存储到一个double中,则在打印时会看到0.0。尝试存储“4.0”而不是4,或者将其设置为4668012349850910720LL。

尝试过-返回的Java数组仍然为零:(您是否删除了“new double[2]”?(我想确保没有输入错误导致您使用该数组的结果而不是函数的返回值。)是的,试过了-给了我同样的问题。好的-实际上有另一个“新的双[2]'我不知道的语句。删除该语句解决了问题。接受此答案,感谢并对迂回表示歉意。但是,这似乎仍然是JNI或某种函数返回过程中的错误。JNI似乎稍微落后于原始状态,在所有Java打印之后才打印JNI打印,在这个问题中,se非常明显地,数组的初始化是由Java完成的。
    jboolean isCopy; 
jdouble* test = env->GetDoubleArrayElements(ret, &isCopy); 
cout<<"Test ..."<<test[1]; //This actually printed out the second element's value in Java.