【发布时间】:2011-10-22 17:17:59
【问题描述】:
我在使用 JNI 时遇到问题,将方法从 C++ 调用到 Java。
我正在尝试调用一个采用布尔值的 void 方法。我的java代码如下:
public void setStatus(boolean bool) {
// Do stuff...
}
public native void initialize(int defaultPort);
在我的 C++ 代码中,我正在创建一个结构来保存环境和对象并将其传递给线程:
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 进行调试。我曾尝试在 Eclipse 中的 setStatus() 中放置一个断点,但它永远不会被调用。 exit() 也没有被调用。程序会停顿一两秒,然后继续。我不确定发生了什么。
谁能帮帮我?
非常感谢。
【问题讨论】:
标签: android methods java-native-interface