Android 可以在这里执行setIntField()吗?在JNI中用int代替Long

Android 可以在这里执行setIntField()吗?在JNI中用int代替Long,android,java-native-interface,Android,Java Native Interface,是否可以更改这段代码,使SetLongField变为setIntField jobject nbField ; UL l_ul_NbField ; jclass longClass = i_env->GetObjectClass(nbField); jfieldID val = i_env->GetFieldID(longClass, "value", "J"); i_env->SetLongField(nbField, val, (L)l_ul_NbField); 当我这

是否可以更改这段代码,使SetLongField变为setIntField

jobject nbField ;
UL l_ul_NbField ;

jclass longClass = i_env->GetObjectClass(nbField);
jfieldID val = i_env->GetFieldID(longClass, "value", "J");
i_env->SetLongField(nbField, val, (L)l_ul_NbField);
当我这样做时:

jclass intClass = i_env->GetObjectClass(nbField);
jfieldID val = i_env->GetFieldID(intClass, "value", "I");
i_env->SetIntField(nbField, val, (I)l_ul_NbField);

它崩溃了!为什么?

你能确定nbField是什么类型吗?如果nbField的类型为Long,则
i_env->GetFieldID(intClass,“value”,“i”)
返回null,因此调用setIntField会导致崩溃