【问题标题】:Get Jclass or jobject from jobject array JNI从jobject数组JNI中获取Jclass或jobject
【发布时间】:2016-04-14 22:18:48
【问题描述】:

我有下面的 Java 代码,其中 Array 是一个自定义对象。

public native int pax_store_get_data_avail_info(DataAvailable[] stats_array);

我的 JNI 生成文件是

    JNIEXPORT jint JNICALL Java_demo_JNIWrapper_pax_1store_1get_1data_1avail_1info
      (JNIEnv *env, jclass jclass1, jobjectArray jobj){
}

我想在 JNI 中填充 jobjectArray,当我尝试使用我的实现时,我的程序崩溃了。

JNIEXPORT jint JNICALL Java_demo_JNIWrapper_pax_1store_1get_1data_1avail_1info
  (JNIEnv *env, jclass jclass1, jobjectArray jobj){


struct pax_store_data_avail_stat_s test_stat [2] ;

    int i;

    test_stat [0].time = 1460332625;  //  4/10/2016, 4:57:05 PM
    test_stat [0].bytes_in_this_second = 20;

    test_stat [1].time = 1460332626;   //  4/10/2016, 4:57:06 PM 
    test_stat [1].bytes_in_this_second = 30;
    jclass dataClass=(*env)->GetObjectClass(env,"demo/DataAvailable");//Crash Over here 

我无法获得 Object 类。所以如果我从 Jobject Array 中获得 jclass 或 jobject 的话,请教我。

还有其他方法可以用来在 JNI 代码中填充 Jobject 数组吗?

【问题讨论】:

  • 您考虑过查阅文档吗?您正在以一种没有记录的方式使用GetObjectClass(),所以它当然不起作用,但那正确使用方法是您问题的答案。

标签: java c java-native-interface


【解决方案1】:

给定一个jobject,您可以使用GetObjectClass 来检索对象的类:

jobject object = ...
jclass c =(*env)->GetObjectClass(env, object);

显然传递类名是行不通的。相反 - 给定一个类名 - 使用FindClass 来获取jclass

jclass c =(*env)->FindClass(env, "demo/DataAvailable");

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多