thanks for reply...
Ok, after changing as adviced, I am able to compile the code... I
have added logs to the code ...
Currently I am facing problem as application is crashing at line:
jclass cls = (*env)->GetObjectClass(env, obj);
Debug information from logcat:
07-28 15:09:58.053: WARN/dalvikvm(529): JNI WARNING: 0x43b8aa08 is not
a valid JNI reference
07-28 15:09:58.053: WARN/dalvikvm(529): in Ldalvik/system/
NativeStart;.run ()V (GetObjectClass)
I doubt on "obj" paratmeter passed to "jclass cls = (*env)-
>GetObjectClass(env, obj);"
[code ]
JavaVM *m_vm;
jobject obj;
JNIEXPORT void JNICALL Java_com_company_pkg_swap_nativeMethod(JNIEnv
*env, jobject obj)
{
obj = LObj; // write this line or comment it, No effect on
output ....
pthread_t thread1;
pthread_create (&thread1, NULL, (void *) &message_function, NULL); //
create thread
}
void message_function ( void *ptr )
{
int status;
JNIEnv *env;
jmethodID mid;
Log("before sleep");
sleep(5); // sleep for 5 sec ...
status = (*m_vm)->GetEnv(m_vm,(void **) &env, JNI_VERSION_1_4);
Log("attaching Current thread");
(*m_vm)->AttachCurrentThread(m_vm, &env, NULL);
if (env == NULL)
{
Log("failed to attached ");
}
Log("getting OBJ.. got class ");
jclass cls = (*env)->GetObjectClass(env, obj); //failing on this
line .....
if (cls != NULL)
{
Log(".. got class ");
mid =
(*env)->GetMethodID(env, cls, "callbackfromNative", "(Ljava/
lang/String;)V");
if (mid == NULL) {
Log("MID null");
(*m_vm)->DetachCurrentThread(m_vm);
return; // method not found
}
Log("got MID ");
}
else
{
Log("No class found ");
(*m_vm)->DetachCurrentThread(m_vm);
return; // class not found
}
Log("done with ID processing ");
const char *pchar = "Hello This is string in C";
jstring jStr = NULL;
jStr = (*env)->NewStringUTF(env, pchar);
Log("string alloc, calling Java method");
(*env)->CallVoidMethod(env, obj, mid,jStr);
(*m_vm)->DetachCurrentThread(m_vm);
//pthread_exit(0);