2016-07-20 4 views
0

Использование JNI Я храню ссылку на объект метода Java (obj) для того, чтобы называть его позже из C:метод JNI объект, называемый на создание

jobject obj = (*newEnv)->NewObject(newEnv, cls, mid); 

где newEnv моя среда, cls мой класс ID и mid - это мой идентификатор метода.

Все работает отлично, за исключением того, что при создании этого объекта, который будет использоваться в качестве ссылки позже, он фактически вызывает метод сразу.

Я хотел бы просто создать объект позже и не сразу вызвать метод.

+2

Этот код не хранит объект метод, это создает новый класс. Итак, да, конструктор будет вызываться немедленно. Вы можете сохранить идентификатор метода конструктора, найдя метод . Но создание объекта создаст его немедленно. –

+2

Середина в NewObject должна быть в середине конструктора объекта, а не какого-либо метода на объекте. Если вы передаете какой-либо другой метод, кроме конструктора, вы делаете это неправильно. И если вы хотите вызвать конструктор через CallVoidMethod, вы также делаете это неправильно - конструктор нельзя назвать как метод. –

+0

Отлично, спасибо человеку –

ответ

0

Благодаря комментариям Гейб Sechan, я был в состоянии понять это:

jmethodID construct = (*newEnv)->GetMethodID(newEnv,cls,"<init>","()V"); 
jobject obj = (*newEnv)->NewObject(newEnv, cls, construct); 

Тогда я могу вызвать метод, который я хочу с помощью:

(*newEnv)->CallVoidMethod(newEnv, obj, mid); 
Смежные вопросы