通过 JNI 调用简单的 java 静态方法不起作用,尽管 c++ 编译并运行它
Posted
技术标签:
【中文标题】通过 JNI 调用简单的 java 静态方法不起作用,尽管 c++ 编译并运行它【英文标题】:Calling simple java static method via JNI does not work, though c++ compiles and run it 【发布时间】:2015-02-24 10:13:39 【问题描述】:考虑这个带有静态方法的Java类:
public class TestClass
public string str;
public TestClass()
str = "Test From Java";
public static String staticMethod()
return "Test From Java";
我已经在 c++ 文件中编写了这些代码行:
QandroidJniObject str = QAndroidJniObject::callStaticObjectMethod(
"org/.../TestClass"
,"staticMethod"
,"(V)Ljava/lang/String;");
似乎一切正常,但我不知道如何使用str
对象。我尝试使用str.tostring()
方法将其转换为QString
对象,但它总是返回一个空字符串。
为什么它不能按预期工作?我还测试了 ()Ljava/lang/String;
的方法签名,但没有成功!
提前致谢。
【问题讨论】:
【参考方案1】:在调用该方法时应在<...>
中指定返回的JNI类型:
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod<jstring>(
"org/.../TestClass"
,"staticMethod");
QString string = str.toString();
这里不需要定义签名,因为你的函数没有参数。
【讨论】:
谢谢内贾特。它成功地工作了。但是返回类型是字符串并且有一些输入参数的静态方法呢?我尝试使用 callStaticObjectMethod 但没有匹配的功能:QAndroidJniObject::callStaticObjectMethod<jstring>("org/.../TestClass" ,"staticMethod" ,"(Ljava/lang/String;)Ljava/lang/String;" ,val.object<jstring>());
val 是一个 QAndroidJniObject:QAndroidJniObject::fromString("This is test");
你的方法似乎没有错,我想不出任何东西。可能最好在一个新问题中提出这个问题并进行更多描述。以上是关于通过 JNI 调用简单的 java 静态方法不起作用,尽管 c++ 编译并运行它的主要内容,如果未能解决你的问题,请参考以下文章
JNI/NDK开发指南——C/C++访问Java实例方法和静态方法