【发布时间】:2016-07-14 23:56:46
【问题描述】:
我正在使用以下 C++ 代码初始化 Java VM。 JNI_CreateJavaVM 抛出 0xC0000005 异常,但如果我忽略它,它仍然会成功。
“Jni.exe”(Win32):已加载“C:\Tools\Java\Jdk8.77x86\jre\bin\zip.dll”。无法找到或打开 PDB 文件。
在 Jni.exe 中的 0x02900282 处引发异常:0xC0000005:访问冲突读取位置 0x00000000。
“Jni.exe”(Win32):已加载“C:\Windows\SysWOW64\shell32.dll”。无法找到或打开 PDB 文件。
我是忘记设置或做某事还是这是“正常”行为?
#include <array>
#include "jni.h"
int main( int argc, char const* args[])
{
JavaVM* jvm;
JNIEnv* env;
std::array<JavaVMOption,1> options;
options[0].optionString = "-Djava.class.path=C:/Users/Thomas/Documents/Visual Studio 2015/Projects/Jni/x64/Debug";
options[0].extraInfo = nullptr;
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_8;
vm_args.options = options.data();
vm_args.nOptions = options.size();
vm_args.ignoreUnrecognized = false;
auto rc = JNI_CreateJavaVM( &jvm, reinterpret_cast<void**>(&env), &vm_args );
if( rc == JNI_OK )
{
jvm->DestroyJavaVM();
}
}
Release 和 Debug 以及 x86 和 x64 构建都会发生这种情况。
【问题讨论】:
-
如果您独立运行程序,而不是在 MSVC 中运行,是否会发生异常?
-
@apangin 异常在 jvm.dll 内部处理。程序不会崩溃。它工作正常。如果没有 MSVC,我将如何检测异常?如果我在 Win32 异常下禁用 C00000005,则消息只会显示在输出控制台中并且没有中断
标签: java visual-studio-2015 jvm java-native-interface