Программа JNI C++ аварийно завершает работу при вызове Rest API в циклеLinux

Ответить Пред. темаСлед. тема
Anonymous
 Программа JNI C++ аварийно завершает работу при вызове Rest API в цикле

Сообщение Anonymous »

Я пытаюсь вызвать API для отдыха, используя JNI в C++. Он успешно звонит с первого раза. Однако когда я вызываю функцию несколько раз в цикле, который несколько раз создает среду JVM, происходит сбой при втором вызове. Ниже мой код:

Код: Выделить всё

for (int i=0;iFindClass("ExternalInterface");

jmethodID ExternalInterfaceConstructor = env->GetMethodID(ExternalInterface,"", "()V");
jobject classifierObj = env->NewObject( ExternalInterface, ExternalInterfaceConstructor);
mainMethod = env->GetMethodID( ExternalInterface,
"InitiateRestApiCall",
"(Ljava/lang/String;[Ljava/lang/String;Ljava/util/HashMap;)LRestApiResult;");
jAppId=env->NewStringUTF(ApiId.c_str());
applicationArgs = env->NewObjectArray( 1, env->FindClass("java/lang/String"), NULL);
applicationArg0 = env->NewStringUTF("Test");

env->SetObjectArrayElement( applicationArgs, 0, applicationArg0);

outputObj = env->CallObjectMethod( classifierObj, mainMethod, jAppId, applicationArgs,stringMap);

env->DeleteLocalRef(jAppId);
env->DeleteLocalRef(applicationArg0);
env->DeleteLocalRef(applicationArgs);
env->DeleteLocalRef(ExternalInterface);
env->DeleteLocalRef(outputClass);

}

int CallExternalApi(
string ApiId,
map restApiArgs
)
{

JNIEnv* env;
if(env!=NULL)
{
env=create_vm();
}
invoke_class( env ,
ApiId,
restApiArgs
);
return 0;
}
Сбой происходит в методе FindClass JNI.

Код: Выделить всё

R13=0x00007ffdf0ffdf70 is pointing into the stack for thread: 0x00000000020d8000
R14=0x0000000000000000 is an unknown value
R15=0x0000000000000000 is an unknown value

Stack: [0x00007ffdf0f01000,0x00007ffdf1001000],  sp=0x00007ffdf0ffdcb0,  free space=1011k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libJavaInterface.so+0x54d3]  JNIEnv_::FindClass(char const*)+0x17
C  [libJavaInterface.so+0x5230]  invoke_class(JNIEnv_*, std::__cxx11::basic_string, std::map)+0x85
C  [libJavaInterface.so+0x540c]  CallExternalApi(std::__cxx11::basic_string, std::map

Подробнее здесь: [url]https://stackoverflow.com/questions/78487514/jni-c-program-crashes-when-call-made-to-rest-api-in-a-loop[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»