0
두 필드가있는 Java 클래스가 있습니다. 하나는 private final double이고 다른 하나는 private Map입니다. Map에 public getter 메서드를 추가했습니다. JNI를 사용하여 C 코드에서 액세스하고 있습니다. 나는 필드를 통해지도를 받고 문제가 있지만 방법을 통해 그것을 받고 아무 문제가 없다 오전 :JNI를 사용하여 필드에 액세스
// The following lines of code work just fine
jclass jCls = (*env)->GetObjectClass(env,object);
jfieldID dblFldId = (*env)->GetFieldID(env,jCls,"nameOfDoubleVariable","D");
jdouble dblVar = (*env)->GetDoubleField(env, object, dblFldId);
// These lines don't work though
jfieldID mapId = (*env)->GetFieldID(env,jCls,"nameOfMapVariable","()Ljava/util/Map;");
jobject mapVar = (*env)->GetObjectField(env,object,mapId);
을하지만 난 기본적으로 내가 통해지도를 얻고있다 (다음 작동하지 않는 두 줄을 교체하는 경우 분야를 통해 대신 직접의 방법) 그렇습니다 일 :
jmethodID m_GetMap = (*env)->GetMethodID(env,jCls,"getMap","()Ljava/util/Map;");
jobject mapVar = (*env)->CallObjectMethod(env,object,m_GetMap);
사람이 말해 줄 수 왜 메서드 호출 작동하지만 현장에서을받지 - 내가 뭔가 잘못하고있는 중이 야 확신합니다!
감사 이스트 반 Pecznyik을 - 때때로 그것은 단지 눈의 두 번째 쌍 : – user1759789
user1759789 도덕적 @가 있음을 취 JNI 자신 시그니처 만들려고하지 않습니다. 'javap -s'의 출력을 사용하십시오. 절대로 틀리지 않습니다. – EJP
EJP 그걸 만들지 않아 - 나는 그다지 창의적이지 않다. :). 뒷면에 비트를 복사하여 붙여 넣기하십시오! 질문에 대답 해 주신 Istvan Pecznyik에게 다시 한번 감사드립니다! – user1759789