使用JNI c ++传递DateTime参数

时间:2014-05-21 08:00:58

标签: java c++ datetime java-native-interface

我正在使用JNI,我需要将DateTime作为参数传递给方法。我应该使用什么格式?

以下是我的代码示例:

int number = 10;
initial = env->GetMethodID(Simulator,"initialize", "(Ljava/util/Date;Ljava/util/Date;I)V");
if (env->ExceptionCheck()){
  cout << "Fail:";
}
env->CallVoidMethod(Simulation,initial,"2014/05/21T00:00:00","2014/05/21T23:59:59",number);

我需要将这些日期作为Ljava / util / Date参数传递而不是作为字符串传递,因为我无法更改JNI调用的java代码。

1 个答案:

答案 0 :(得分:0)

您必须先创建两个java.util.Date个对象。像这样:

int number = 10;
jmethodID initial = env->GetMethodID(Simulator,"initialize", "(Ljava/util/Date;Ljava/util/Date;I)V");
if (env->ExceptionCheck()){
  cout << "Fail:";
}
jclass dateType = env->FindClass("Ljava/util/Date;");
if(dateType == nullptr){
  cout << "Fail:";
}
jmethodID dateTypeConstructor= env->GetMethodID(dateType, "<init>", "(Ljava/lang/String;)V");
if(constructor == nullptr){
  cout << "Fail:";
}
jstring constructorString1 = env->NewStringUTF("2014/05/21T00:00:00");
jobject dateObject1 = env->NewObject(dateType , dateTypeConstructor, constructorString1);
if(dateObject1  == nullptr)
  cout << "Fail:";
}
jstring constructorString2 = env->NewStringUTF("2014/05/21T23:59:59");
jobject dateObject2 = env->NewObject(dateType , dateTypeConstructor, constructorString2);
if(dateObject2  == nullptr)
  cout << "Fail:";
}
env->CallVoidMethod(Simulation, initial, dateObject1, dateObject2, number);

构造函数Date(String s)deprecated since JDK 1.1,但如果必须使用SimpleDateFormat,原则是相同的,或者你可以在Java中编写一个静态方法,它将返回{{} 1}}传递给它的String的对象。