我有一个Java函数,它返回一个Class
的单例实例public static synchronized MyClass getInstance() throws MyClassException{
if (instance == NULL){
// create
}
return instance;
}
我想通过C ++代码调用它,但是当我这样做时,它会返回NoSuchMethodError。
cls = jenv->FindClass("MyClass");
if (cls == NULL)
{
//error handling
}
mid = jenv->GetStaticMethodID(cls, "getInstance", "()LMyClass");
if (mid == NULL)
{
//error handling
}
当我跑步时:
javap -s -p on MyClass, I get the signature:
public static synchronized MyClass getInstance() throws MyClassException;
Signature: ()LMyClass;
如果我在Java类中将函数签名更改为void,则GetStaticMethodID调用将按预期工作。
我是否需要设置一个jobject以期望来自呼叫的返回值?
这可以不先调用GetStaticMethodID吗?
答案 0 :(得分:1)
我认为问题在于它无法解析指定的输出参数。如果你的java类在包中:“com / work /”,你会说:
jenv->GetStaticMethodID(cls, "getInstance", "()Lcom/work/MyClass;");
应该这样做。
编辑:
看起来答案是在javap的输出中不是吗?你应该这样做:
jenv->GetStaticMethodID(cls, "getInstance", "()LMyClass;");