它不会创建Java VM(JNI)

时间:2010-04-03 07:30:15

标签: java c++ jvm java-native-interface

我的简单命令行应用:

int _tmain(int argc, _TCHAR* argv[])
{
 JavaVM *jvm;
 JNIEnv *env;
 JavaVMInitArgs vm_args;
 JavaVMOption options[1];
 options[0].optionString = "-Djava.class.path=."; //Path to the java source code
 vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6
 vm_args.nOptions = 1;
 vm_args.options = options;
 vm_args.ignoreUnrecognized = 0;

 jint ret = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
 return 0;
}

给了我:

Error occurred during initialization of VM
Unable to load native library: Can't find dependent libraries

永远不会达到“返回0”的断点。 jvm.dll与我的命令行应用程序驻留在同一目录中。

我不明白这是错的。有任何想法吗? Thanx提前

2 个答案:

答案 0 :(得分:5)

我认为您的问题在Sun JNI常见问题解答中由this question回答。

TL; DR版本:不要移动JVM安装的DLL。

答案 1 :(得分:2)

在我的经验中,

<强>原因

也许,JVM.DLL位于路径下方。

  

C:\ Program Files \ Java \ jdk1.6.0_xx \ jre \ bin \ client \(a)

以下文件夹包含JVM需要的许多DLL;

  

C:\ Program Files \ Java \ jdk1.6.0_xx \ jre \ bin \(b)

因此,JMV.DLL(您动态链接的)会尝试搜索其父文件夹中的所有DLL(b)。

<强>解决方案

不要将JVM.DLL复制到.exe所在的文件夹中! 检查PATH系统变量。它必须包含(a)和(b)路径。 如果是这样,也许您的.exe将成功执行。