Tengo una función de Java que devuelve una instancia singleton de una ClaseJNI llamada a la función de Java devolver un resultado objeto en NoSuchMethodError
public static synchronized MyClass getInstance() throws MyClassException{
if (instance == NULL){
// create
}
return instance;
}
quiero llamar a esto a través de código C++, pero cuando lo hago, devuelve un NoSuchMethodError.
cls = jenv->FindClass("MyClass");
if (cls == NULL)
{
//error handling
}
mid = jenv->GetStaticMethodID(cls, "getInstance", "()LMyClass");
if (mid == NULL)
{
//error handling
}
cuando corro:
javap -s -p on MyClass, I get the signature:
public static synchronized MyClass getInstance() throws MyClassException;
Signature:()LMyClass;
Si cambio de la firma de la función de anular en la clase de Java, la llamada GetStaticMethodID funciona como se esperaba.
¿Necesito configurar un proyecto para esperar el valor de retorno de la llamada?
¿Es esto posible sin llamar primero a GetStaticMethodID?
¿Dónde está la llamada que devuelve el error? –
Cuando ejecuto la aplicación C++, obtengo: Excepción en el hilo "principal" java.lang.NoSuchMethodError: getInstance – donalmg
Me pregunto si necesita especificar la ruta completa a "MyClass" en la llamada a GetStaticMethodId. Por ejemplo: jenv-> GetStaticMethodID (cls, "getInstance", "() Lcom/work/MyClass;"); Dependiendo de dónde vive el código CPP en relación con el código Java? Solo un pensamiento. – eternaln00b