У меня есть Windows MFC приложение, которое:
(1 )загружает JVM(JNI_CreateJavaVM()
)
(2 )подключает основной поток к JVM(AttachCurrentThread()
)
(3 )загружает некоторые классы и методы Java(FindClass()
и GetMethodID()
/GetStaticMethodID()
)
(4 )Регистрирует некоторые собственные обратные вызовы для использования в коде Java(RegisterNatives()
)
(5 )Отсоединяет поток от JVM(DetachCurrentThread()
)
(6 )Уничтожает JVM(DestroyJavaVM()
)
Все вышеперечисленные функции завершаются успешно через раз Я запускаю приложение. Я знаю, что они преуспевают, потому что, в дополнение к вышесказанному, я взаимодействую с приложением и успешно вызываю статические методы Java, и эти методы Java успешно вызывают мои собственные обратные вызовы. Мое приложение завершается изящно, и несомненно, что ожидаемые функции Java и собственные обратные вызовы были выполнены.
Тем не менее, через раз когда я запускаю приложение, вызов JNI_CreateJavaVM()
терпит неудачу (и не заполняетJavaVM *
). Абсолютно ничего не меняется между запусками приложения . Я просто запускаю его один раз (успешно, даже без ничего, кроме вышеупомянутых 6 шагов ), изящно завершаю работу, запускаю снова, и он терпит неудачу, туда и обратно. Нет никаких исключений для обратного -и -следующего успеха/неудачи -. Я могу запускать его десятки раз, и он точно колеблется каждый раз между успехом и неудачей на линии JNI_CreateJavaVM()
.
При необходимости я вставлю код. Тем не менее, я надеюсь, что у кого-то есть понимание того, что я предоставил. (Примечание. :это приложение листа свойств -BCGSoft MFC, хотя я сильно сомневаюсь, что это имеет значение.)