P
Ph. Barthelemy
Hi,
I am trying to get and set a boolean member variable ( in a Java class
) from the C-side code.
Pretty basic, eh...
but it does not work :
- a C-side 'get', always returns 0,
- a C-side 'set' does not change the value on the Java-side, but if I
'get' the value on the C-side, the 'set' seems to work...
Of course, the variable env, obj and the jfieldID's are not null...
I am clueless...
Any idea anyone ?
the code snippet follows :
_______________________________________
__ the java variable declaration
private boolean useBulkRead = false;
_______________________________________
__ THE SNIPPET THAT CALLS THE 2 FUNCTIONS
jboolean j = getUseBulkReadField(env, obj );
fprintf(stderr,"HeartBit:: getUseBulkReadField( : %d... \n", j);
setUseBulkReadField(env, obj,(jboolean) 1 );
j = getUseBulkReadField(env, obj );
fprintf(stderr,"HeartBit:: getUseBulkReadField( : %d... \n", j);
fflush( stderr );
_______________________________________
__ read a boolean member variable
jboolean getUseBulkReadField(JNIEnv *env, jobject obj) {
jclass cls = (*env)->GetObjectClass(env, obj);
jfieldID fidUseBulkRead;
fidUseBulkRead = (*env)->GetFieldID( env, cls,
"useBulkRead","Z" );
return (*env)->GetBooleanField(env, cls, fidUseBulkRead );
}
________________________________________
__ set this variable
jboolean setUseBulkReadField(JNIEnv *env, jobject obj, jboolean value)
{
jclass cls = (*env)->GetObjectClass(env, obj);
jfieldID fidUseBulkRead;
fidUseBulkRead = (*env)->GetFieldID( env, cls,
"useBulkRead","Z" );
(*env)->SetBooleanField(env, cls, fidUseBulkRead, value );
}
Thanks for helping !
--Philippe
I am trying to get and set a boolean member variable ( in a Java class
) from the C-side code.
Pretty basic, eh...
but it does not work :
- a C-side 'get', always returns 0,
- a C-side 'set' does not change the value on the Java-side, but if I
'get' the value on the C-side, the 'set' seems to work...
Of course, the variable env, obj and the jfieldID's are not null...
I am clueless...
Any idea anyone ?
the code snippet follows :
_______________________________________
__ the java variable declaration
private boolean useBulkRead = false;
_______________________________________
__ THE SNIPPET THAT CALLS THE 2 FUNCTIONS
jboolean j = getUseBulkReadField(env, obj );
fprintf(stderr,"HeartBit:: getUseBulkReadField( : %d... \n", j);
setUseBulkReadField(env, obj,(jboolean) 1 );
j = getUseBulkReadField(env, obj );
fprintf(stderr,"HeartBit:: getUseBulkReadField( : %d... \n", j);
fflush( stderr );
_______________________________________
__ read a boolean member variable
jboolean getUseBulkReadField(JNIEnv *env, jobject obj) {
jclass cls = (*env)->GetObjectClass(env, obj);
jfieldID fidUseBulkRead;
fidUseBulkRead = (*env)->GetFieldID( env, cls,
"useBulkRead","Z" );
return (*env)->GetBooleanField(env, cls, fidUseBulkRead );
}
________________________________________
__ set this variable
jboolean setUseBulkReadField(JNIEnv *env, jobject obj, jboolean value)
{
jclass cls = (*env)->GetObjectClass(env, obj);
jfieldID fidUseBulkRead;
fidUseBulkRead = (*env)->GetFieldID( env, cls,
"useBulkRead","Z" );
(*env)->SetBooleanField(env, cls, fidUseBulkRead, value );
}
Thanks for helping !
--Philippe