JNI를 사용하여 Java C++ 프로젝트에서 Java Date 인수를 Java 메소드에 전달해야합니다.JNI의 날짜 문제
jclass date = env->FindClass("java/util/Date");
if (env->ExceptionCheck()){
cout << "Fail:";
}
jmethodID dateTypeConstructor= env->GetMethodID(date, "<init>", "()V");
if(dateTypeConstructor == nullptr){
cout << "Fail:";
}
jobject dateObjectStart = env->NewObject(date, dateTypeConstructor);
if(dateObjectStart == nullptr){
cout << "Fail:";
}
long a = env->CallLongMethod(dateObjectStart,gettIME);
디버깅을 통해 난 582106004
이다 a
의 값을 취. 이 값은 1970 년 1 월 1 일 이후로 경과 된 msec입니다. 자바에서 Date 객체를 인스턴스화하고 시간을 얻는 동일한 코드가 올바른 값인 1400741921774
을 제공합니다.
왜 이런 일이 발생합니까? 내 C++/JNI 프로젝트에서 JDK 1.8을 사용하는 동안 Java/util/Date가 약간 사용되지 않으므로 JDK와 관련하여 문제가 해결되지 않았습니다.
'long a'를'double a'로 바꾸는 것이 더 합리적인 값을주는 것처럼 보입니다. – igoutas
'Java.util.Date' 자체는 단일 문자열을 사용하는 생성자가 아닙니다. 당신의 코드에서'gettIME'은 어떻게 정의되어 있습니까? – Constantin
또한 'long'뿐만 아니라 'jlong'(항상 64 비트)을 사용해야합니다. 아키텍처 및 Java VM (32Bit/64Bit)에 따라 차이점이 있습니다. – Constantin