当前位置: 首页 > 知识库问答 >
问题:

为NewObjectA()函数创建jvalues的args数组时出错-JNI调用API

贺刚毅
2023-03-14

程序员将所有要传递给构造函数的参数放在紧随methodID参数之后的jvalues args数组中。NewObjectA()接受这个数组中的参数,然后将它们传递给程序员希望调用的Java方法。

在我的例子中,构造函数需要传递给它两个java字符串。因此,我尝试了以下几点:

jclass jcls_File = env->FindClass("java/io/File");
jmethodID  File_constructor = env->GetMethodID(jcls_File, "<init>","(Ljava/lang/String;Ljava/lang/String;)V");
jstring home = ctojstring(env,"/home/workspace");
jstring filename = ctojstring(env,"mydatafile");
jvalue FileLocationParams[] = {home,filename};  // COMPILE ERROR HERE.
jobject MyDataFile = env->NewObjectA(jcls_File, File_constructor,FileLocationParams);

其中ctojstring只是以下函数:

jstring ctojstring(JNIEnv *env,std::string mystring){
    return env->NewStringUTF(mystring.c_str());
}

共有1个答案

上官和韵
2023-03-14

jvalue是union类型。

并声明如下:

typedef union jvalue { 
    jboolean z; 
    jbyte    b; 
    jchar    c; 
    jshort   s; 
    jint     i; 
    jlong    j; 
    jfloat   f; 
    jdouble  d; 
    jobject  l; 
} jvalue;

如果要将jstring分配给jvalue,可以按以下方式进行。

jvalue FileLocationParams[2];
FileLocationParams[0].l = home;
FileLocationParams[1].l = filename;
jvalue FileLocationParams[] = {home,filename};  // COMPILE ERROR HERE.
 类似资料:
  • 创建一个函数,但它给出的错误数据库表如下所示

  • 问题内容: 在Python中,如何将列表转换为? 我需要知道,因为功能 希望将几个time_series对象作为传递,而我有一个timeseries对象列表。 问题答案: 您可以在迭代器之前使用运算符,以在函数调用中对其进行扩展。例如: (请注意之前) 从python文档中: 如果语法* expression出现在函数调用中,则表达式必须求值为可迭代。来自此迭代器的元素被视为附加的位置参数。如果存

  • 我有一个gridview和一个放入列表,一个有函数,另一个没有函数,所以只有一个标记。尽管我的标记中有,但似乎无法解决这个问题。 我试过其他人提到的清理和重建,但对我不起作用,错误还在显现。 创建control-asp时出错:dropdownlist ;id=“dropdownlist1” runat=“server”缺少的结束标记。 创建控件时出错-ASP:GridView ;id=“GridV

  • 我想创建一个Azure函数,它接受传递给它的JSON主体,并将该文档插入到Azure COSMOSDB实例中。 并按如下方式实现该函数: 在门户中,我放入了一个简单的示例文档:

  • 我使用DropBox API在Xamarin中实现Dropbox。表单(NET标准)。我上传文件成功,但下载时收到此错误 Dropbox。Api。BadInputException:调用API函数“文件/下载”时出错:错误的HTTP“Content-Type”标头:“Application/x-www-form-urlencoded”。期待“text/平原”、“text/平原;charset=ut

  • 我已经尝试了很多东西来部署这个功能,安装和卸载节点多次和更多的尝试,但它仍然给我同样的错误。我试图实现的是使用agora-Access令牌包生成令牌使用Firebase函数代码是: 错误是: ===部署到'xxxx'... 我部署函数运行命令: npm--prefix"$RESOURCE_DIR"run lint 皮棉。 函数:完成预部署脚本的运行。i函数:确保启用所需的APIcloudfunct