我有一个 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 属性表应用程序,尽管我非常怀疑这很重要。)