我遇到了JNI的问题,调用从C到Java的方法.
我试图调用一个带有布尔值的void方法.我的java代码如下:
public void setStatus(boolean bool) {
// Do stuff...
}
public native void initialize(int defaultPort);
在我的C代码中,我正在创建一个结构来保存env和对象并将其传递给一个线程:
JNIEXPORT void JNICALL Java_com_device_client_HostConnection_initialize
(JNIEnv * env, jobject obj, jint port)
{
struct javaInfo* data = (struct javaInfo*) malloc(sizeof(struct javaInfo));
data->env = env;
data->javaObjHost = obj;
pthread_t pth;
pthread_create(&pth, NULL, startServer, (void *) data);
free(data);
}
在实际的函数中,我试图获取类,然后是MethodID,然后调用void方法,如下所示:
void *startServer(void* arg) {
struct javaInfo* data = (struct javaInfo*) arg;
JNIEnv* env = data->env;
jobject javaObjHost = data->javaObjHost;
cls = env->GetObjectClass(javaObjHost);
mid = env->GetMethodID(cls, "setStatus", "(Z)V");
if (mid == 0) {
exit(-1);
}
env->CallVoidMethod(javaObjHost, mid, true);
}
我很难用JNI进行调试.我已经尝试在setStatus()中在Eclipse中放置一个断点但它永远不会被调用. exit()也不会被调用.程序会踩踏一两秒,然后继续.我不确定发生了什么.
有人可以帮帮我吗?
非常感谢你.