我正在尝试将一些C ++对象转换为Java对象。 但我有一个奇怪的问题,我无法找出它为什么会发生。
我正在做的是获取C ++对象列表,从中创建Java对象并将其添加到ArrayList。
在我的C ++对象中添加一个新的String(getCoordinates())之前,它一直运行良好。从那以后,它再也不起作用了。
这是我的代码:
jobject convertCPPTripsToJobject_v2(JNIEnv *env, std::list<Trip> *trips_cpp) {
// create an ArrayList
jclass clsArrayList = env->FindClass("java/util/ArrayList");
jmethodID methodIdInitArray = env->GetMethodID(clsArrayList, "<init>", "()V");
jobject listTrips = env->NewObject(clsArrayList, methodIdInitArray);
if (clsArrayList != 0) {
// we get the id of the add method from the ArrayList
jmethodID midArrayListAdd = env->GetMethodID(clsArrayList, "add", "(Ljava/lang/Object;)Z");
if (midArrayListAdd != 0) {
// create different Java object from the cpp list
for (auto trip_cpp : *trips_cpp) {
// create a ParcourGreen object
jclass clsParcour = env->FindClass("net/pompoc/greenui/modele/ParcourGreen");
jmethodID methodIdInitParcour = env->GetMethodID(clsParcour, "<init>", "(IILjava/lang/String;Ljava/lang/String;FZLjava/lang/String;)V");
jobject parcour = env->NewObject(clsParcour, methodIdInitParcour,
trip_cpp.getId(),
trip_cpp.getType(),
env->NewStringUTF(trip_cpp.getStartDate().c_str()),
env->NewStringUTF(trip_cpp.getEndDate().c_str()),
trip_cpp.getSteps(),
trip_cpp.getIsPostProcessed() ? JNI_TRUE : JNI_FALSE,
env->NewStringUTF(trip_cpp.getCoordinates().c_str())
);
env->CallBooleanMethod(listTrips, midArrayListAdd, parcour);
}
}
}
return listTrips;
}
我收到错误:
Invalid indirect reference 0x00000000 in decodeIndirectRef
(当然不是0x00000000)
非常感谢任何帮助!
修改
以下是我的错误消息:
11-24 16:20:44.863: W/dalvikvm(16337): Invalid indirect reference 0xbea54328 in decodeIndirectRef
11-24 16:20:44.863: I/dalvikvm(16337): "main" prio=5 tid=1 RUNNABLE
11-24 16:20:44.863: I/dalvikvm(16337): | group="main" sCount=0 dsCount=0 obj=0x41835ea0 self=0x417304c8
11-24 16:20:44.863: I/dalvikvm(16337): | sysTid=16337 nice=0 sched=0/0 cgrp=apps handle=1074065748
11-24 16:20:44.863: I/dalvikvm(16337): | state=R schedstat=( 0 0 0 ) utm=100 stm=42 core=0
11-24 16:20:44.863: I/dalvikvm(16337): at net.pompoc.greenui.modele.ParcourGreen.<init>(ParcourGreen.java:-1)
11-24 16:24:36.289: E/dalvikvm(19526): VM aborting
11-24 16:24:36.289: A/libc(19526): Fatal signal 6 (SIGABRT) at 0x00004c46 (code=-6), thread 19526 (com.greenui)
编辑2
经过进一步调查后,似乎这似乎是造成我所有麻烦的原因:
jobject parcour = env->NewObject(clsParcour, methodIdInitParcour,
trip_cpp.getId(),
trip_cpp.getType(),
env->NewStringUTF(trip_cpp.getStartDate().c_str()),
env->NewStringUTF(trip_cpp.getEndDate().c_str()),
trip_cpp.getSteps(),
trip_cpp.getIsPostProcessed() ? JNI_TRUE : JNI_FALSE,
---> env->NewStringUTF(trip_cpp.getCoordinates().c_str()) <---
);
没有这一行,它就可以了。 有了它,它没有。