我试图将数组从c ++传递给java。编译没有错误。但无法运行(崩溃)。当我调试代码时,返回代码中会发生错误
我尝试实现此代码how to return c++ char 2d array using JNI to JAVA
这是我的代码
JNIEXPORT jobjectArray JNICALL my_function();
// ...
// some code
// ...
// i want convert float point[3][2] to java
jclass intArray1DClass = env->FindClass("[I");
jclass intArray2DClass = env->FindClass("[[I");
// float point[3][2]
jint sizeX = 3;
jint sizeY = 2;
jobjectArray array2D = env->NewObjectArray(
sizeX, intArray2DClass, NULL);
for (jint i = 0; i < sizeX; i++)
{
jobjectArray array1D = env->NewObjectArray(
sizeY, intArray1DClass, NULL);
for (jint y = 0; y < sizeY; y++)
{
jfloatArray value = env->NewFloatArray(point[i][y]); // float point[3][2]
env->SetObjectArrayElement(array1D, y, value);
}
env->SetObjectArrayElement(array1D, i, array1D);
}
return array2D;
这就是我从Java调用函数的方式。是吗?
float[][] point = my_function()
谢谢
更新
最后我使用一维数组,因为它很容易编写代码。根据{{3}},我们应该使用一维数组
jint sizeX = 6;
jfloatArray array1D = env->NewFloatArray(sizeX);
env->SetFloatArrayRegion(array1D, 0, sizeX, point);
return array1D;
答案 0 :(得分:2)
首先,您似乎在声明了一个整数类型的Java数组,即//Get the number of count in web table.
WebElement table =d.findElement(By.xpath("//*[@id='ui-grid']/div/div/div/div[2]/table/tbody"));
List<WebElement> trcount = table.findElements(By.tagName("tr"));
int size = trcount.size();
System.out.println(size);
//Select particular tag(Select tag)
List<WebElement> Select = table.findElements(By.xpath("//*[@id='ui-grid']/div/div/div/div[2]/table/tbody/tr/td/span/select"));
int select_size = Select.size();
System.out.println(select_size);
//If web table have select tag perfrom below else to catch no search elements exceptions.
try{
for(int j=1;j<=select_size;j++) {
By tag = By.xpath("(//*[@class='ng-star-inserted']/span/select)["+j+"]");
System.out.println("Test");
}
}catch(Exception e){
System.out.println((e.getMessage()));
}
//Select particular tag(Input tag)
List<WebElement> Select1 = table.findElements(By.xpath("//*[@id='ui-grid']/div/div/div/div[2]/table/tbody/tr/td/span/input"));
int select_input = Select1.size();
System.out.println(select_input);
try{
for(int i=1;i<=select_input;i++) {
By tag1 = By.xpath("(//*[@class='ng-star-inserted']/span/input)["+i+"]");
System.out.println("Test");
d.findElement(tag1).sendKeys("12345");
Thread.sleep(3000);
//d.findElement(Accept_button).click();
}
}catch(Exception e){
System.out.println((e.getMessage()));
}
,而不是int [][]
。
第二,为什么将float[][]
设置为数组的元素?它应该是简单的float。
第三,在最后一行中,您的意思可能是jfloatArray
第四,在声明数组时,需要指定它包含的类,因此对于2D数组,它包含1D数组,对于1D数组,它仅包含浮点数。
PS:链接的问题/答案实际上是在返回3D数组。因此,您需要减少代码中的维数。