Вызов JNI для функции Java, возвращающей объект, приводит к NoSuchMethodError - PullRequest
5 голосов
/ 01 февраля 2012

У меня есть функция Java, которая возвращает одиночный экземпляр класса

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; 

Если я изменю подпись функции на void в классе Java, вызов GetStaticMethodID будет работать как положено.

Нужно ли устанавливать объект задания, чтобы ожидать возвращаемое значение от вызова?

Возможно ли это без предварительного вызова GetStaticMethodID?

1 Ответ

1 голос
/ 02 февраля 2012

Я считаю, что проблема в том, что он не может разрешить указанный выходной аргумент.Если бы ваш Java-класс был в пакете: «com / work /», вы бы сказали:

jenv->GetStaticMethodID(cls, "getInstance", "()Lcom/work/MyClass;");

Это должно сделать это.

РЕДАКТИРОВАТЬ:

Это выглядиткак ответ в выводе javap не так ли?Вы должны делать:

jenv->GetStaticMethodID(cls, "getInstance", "()LMyClass;");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...