0
我想從C++代碼中設置Java對象的原始雙數組字段。該Java對象定義爲:Java JNI:在C++中設置基本(雙)數組的錯誤值
public class EmitterTrack {
public int trackNumber;
public long lastUpdatedTime;
public int associatedEmitterModeTrackNumber;
public EmitterObservationStruct updatedEmitterObservation;
public double[] emitterTypeProbabilities;
public EmitterTrack() {
emitterTypeProbabilities = new double[9];
updatedEmitterObservation = new EmitterObservationStruct();
}
}
是創建一個新的EmitterTrack對象和嘗試將雙陣列的C++代碼看起來像:
void sendEmitterTracksToJava(jclass javaEmitterTrackClass, JNIEnv *jniEnv, EmitterTrack emitterTrack) {
jmethodID ctor = jniEnv->GetMethodID(javaEmitterTrackClass, "<init>", "()V");
jobject javaEmitterTrack = jniEnv->NewObject(javaEmitterTrackClass, ctor, NULL);
jfieldID fid = jniEnv->GetFieldID(javaEmitterTrackClass, "emitterTypeProbabilities", "[D");
jintArray jary;
jary = (jintArray)jniEnv->GetObjectField(javaEmitterTrack, fid);
jint *intArray = jniEnv->GetIntArrayElements(jary, 0);
for (j = 0; j < 9; j++) {
intArray[j] = emitterTrack.emitterTypeProbabilities[j];
}
jniEnv->ReleaseIntArrayElements(jary, intArray, 0);
}
當我傳遞的Java發射極軌道對象返回到Java我看到這樣的輸出:
Emitter Track:
emitterTypeProbabilities[0]: 2.12199579097E-313
emitterTypeProbabilities[1]: 6.3659873739E-313
emitterTypeProbabilities[2]: 1.06099789568E-312
emitterTypeProbabilities[3]: 1.48539705397E-312
emitterTypeProbabilities[4]: 3.95E-322
emitterTypeProbabilities[5]: 0.0
emitterTypeProbabilities[6]: 0.0
emitterTypeProbabilities[7]: 0.0
emitterTypeProbabilities[8]: 0.0
有什麼,我做錯了,我只是沒有看到?
您期待什麼值?那些肯定看起來像浮點舍入錯誤... – awksp
不應該使用jdoubleArray而不是jintArray? –
哦,大聲哭喊!非常感謝你......我一直在盯着這個永遠,它從來沒有想過我。我現在覺得自己像一個白癡,但它是固定的。 – homebrew2k9