我需要调用java方法。
Projekt.cpp:
jclass cls = env->GetObjectClass(obj);
jmethodID mid = env->GetMethodID(cls, "Vypocet", "(III)I");
int vysledek = env->CallIntMethod(cls, mid, nahodne_cislo, d, n);
Main.java
public Integer Vypocet(int a, int b, int c)
{
...........other code......
...........................
return vysl;
}
我不知道现在呢? :(
LogCat 写入错误:0xdeadd00d 处的致命信号 11 (SIGSEGV)
。
最佳答案
在您的 Java 代码中,您声明了一个返回类型为 Integer
的方法(这是一个类,全名为 java.lang.Integer)。
但是随后在您的 C++ 代码中您寻找一个带有签名 (III)I
的方法,这意味着三个 int
参数并返回一个 int
值(value)。之后您使用 CallIntMethod
,它还需要一个返回 int
返回类型的方法。
您可以通过将 java 代码更改为:
来解决您的问题public int Vypocet(int a, int b, int c) {
// your code
return vysl;
}
另一种解决方案是更改 C++ 代码以反射(reflect) Integer
返回类型,如下所示:
// call your java method
jclass cls = env->GetObjectClass(obj);
jmethodID mid = env->GetMethodID(cls, "Vypocet", "(III)Ljava/lang/Integer;");
jobject intObj = env->CallIntMethod(cls, mid, nahodne_cislo, d, n);
// call the Integer.getValue() to get a native int value
jclass integercls = env->GetObjectClass(intObj);
jmethodID getVal = env->GetMethodID(cls, "intValue", "()I");
int value = jenv->CallIntMethod(integervalue, getVal);
关于java - 在 NDK 中调用 java 代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23677931/