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

为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

  • 我一直得到这个错误: 致命错误:未捕获错误:调用未定义的函数mysqli_connect()在C:\Apache24\htdocs\asd.php: 2堆栈跟踪:#0{main}抛出在C:\Apache24\htdocs\asd.php在第2行 在任何php文件中运行任何mysqli cmd时,例如: 我已经在php中启用了扩展。ini文件,我一直在努力解决这个问题,但我就是做不到。任何帮助都将不