Повторный вызов JNI_CreateJavaVM возвращает -1 после вызова DestroyJavaVM

Я пытаюсь вспомнить JNI_CreateJavaVM после вызова DestroyJavaVM.

Я вызываю их в следующем порядке: InitJVM -> ReleaseJVM -> InitJVM

В первый раз при инициализации JNI_CreateJavaVM возвращает 0 и работает нормально.
во второй раз при инициализации после уничтожения JNI_CreateJavaVM возвращает -1 и не работает.

В чем будет проблема?

Вот функция, которая создает JVM:

#elif __linux
HRESULT PWNJava::InitJVM(void) {

if(m_bRunning) {
Log("Error : JVM is already Running! (PWNJava::Init)");
return PWN_FAIL;
}

const int kNumOptions = 3;
JavaVMOption options[kNumOptions] = {
{ const_cast<char*> ("-Xmx128m"), NULL},
{ const_cast<char*> ("-verbose:gc"), NULL},
{ const_cast<char*> ("-Djava.class.path=../../Class"), NULL}
};

JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_6;
vm_args.options = options;
vm_args.nOptions = sizeof (options) / sizeof (JavaVMOption);
assert(vm_args.nOptions == kNumOptions);

int res = JNI_CreateJavaVM(&jvm, reinterpret_cast<void**> (&env), &vm_args);
if (res != JNI_OK) {
Log("Error : createJavaVM(&jvm, &env, &vm_args)");
return PWN_FAIL;
}

m_bRunning = true;

Log("Success : PWNJava::Init");

return PWN_OK;
}

#endif

Вот функция удаления JVM:

void PWNJava::ReleaseJVM(void) {

if (jvm)
jvm->DestroyJavaVM();

jvm = NULL;
delete jvm;

env = NULL;
delete env;

m_bRunning = false;

Log("Success : PWNJava::ReleaseJVM");

}

2

Решение

В прошлый раз я смотрел на JNI_DestroyJVM()сказал «Однако JDK / JRE по-прежнему не поддерживает выгрузку виртуальных машин». Только не называйте это, и не переинициализируйте это также.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]