我正在开发一个与服务器通信的jni客户端软件。我可以建立连接,读取所需信息并将其返回给我的Java程序。现在我想让连接无限期地保持,也就是说,连接已经建立,信息应该在无限循环中被读取(我不想在每个jni函数调用时断开和重新连接)。是否可以从工作的jni线程传递一个字节数组到我的Java程序中?
非常感谢。
此致敬礼,
Thomas
非常感谢。
此致敬礼,
Thomas
package com.mysuper.game;
public class MyApp {
public static void callMeFromJNI(byte[] data) {
// ...
}
}
并且C++代码在工作线程上运行:
JavaVM *vm;
// use vm->AttachCurrentThread(&env, 0); in thread function to get valid JNI interface pointer, on thread end use DetachCurrentThread().
JNIEnv *env;
void myFunc() {
// some test data to send
const int len = 32;
char data[len] = {0,1,2,3,4};
jclass app = env->FindClass("com/mysuper/game/MyApp");
jmethodID sendDataToJava = env->GetStaticMethodID(app, "callMeFromJNI", "([B)V");
jbyteArray bArray = env->NewByteArray(len);
char *bytes = (char *)env->GetByteArrayElements(bArray, 0);
memcpy( bytes, data, len);
env->ReleaseByteArrayElements(bArray, bytes, JNI_ABORT);
env->CallStaticVoidMethod(app, sendDataToJava, bArray);
}
了解更多关于此工作原理的信息,请查看: