android jni 调用java对象_android – JNI从C调用Java方法

我遇到了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()也不会被调用.程序会踩踏一两秒,然后继续.我不确定发生了什么.

有人可以帮帮我吗?

非常感谢你.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值