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