【问题标题】:use JNI to start JVM Builder C++使用 JNI 启动 JVM Builder C++
【发布时间】:2014-08-28 13:53:10
【问题描述】:

在这篇帖子How to use JNI to start JVM in builder C++ application 中,我将 jvm.lib 从 Coff 转换为 Omf。我用它来链接 JNI_CreateJavaVM() 函数。但它崩溃了。

我使用另一个代码从 Builder C++ 应用程序启动 JVM。当我加载 jvm.dll 时。这行得通!!当我在 java 目录中加载 jvm 时创建 JVM,但当我将这个文件(jvm.dll)复制到另一个目录并从这个目录调用它时没有创建。你能解释为什么我不能使用 jvm.dll 的副本来创建我的 JVM?

这是我的代码:

JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options;
memset(&vm_args, 0, sizeof(vm_args));

options.optionString = "-Djava.class.path=.;tika-app-1.5.jar;";
jint ii = GetVersion();

vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 1;
vm_args.options = &options;
vm_args.ignoreUnrecognized = 0;
//String strPath = "C:\\Users\\mhechkel\\Documents\\RAD Studio\\Projects\\TestJVM\\Win32\\Debug\\jvm.dll";  
// when i copy jvm.dll in my application folder: It dosn't work!!!
String strPath = "C:\\Program Files (x86)\\Java\\jdk1.7.0_65\\jre\\bin\\server\\jvm.dll";

HMODULE jvm_dll = LoadLibrary(strPath.c_str()); //here it work fine!!

/// You might check the GetLastError() here after the LoadLibrary()
if(jvm_dll == NULL) 
{    
    Label1->Caption = "can't load dll"; 
}

 JNI_CreateJavaVM_ptr = (JNI_CreateJavaVM_func)GetProcAddress(jvm_dll, "JNI_CreateJavaVM");

 /// You might check the GetLastError() here
 if(JNI_CreateJavaVM_ptr == NULL)
 {
      Label1->Caption = "can't load function";
 }

 int ret = JNI_CreateJavaVM_ptr(jvm, (void**)&env, &vm_args);
 if(ret < 0)
 {
    Label1->Caption = "Unable to Launch JVM\n";
 }
 return env;

【问题讨论】:

  • 在这篇文章stackoverflow.com/questions/7989502/… 和答案 n°1 中他说它应该是 ProgramFile\java\ 目录中的 jvm.. 1- 添加 jvm.dll 所在的位置(应该是在程序 files\java\jsdk_*\bin\server) 到 Windows 机器上的 PATH 环境变量中。这是正确的吗??!!

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


【解决方案1】:

您需要完整的 JRE 才能创建 Java VM。
如果在相对于jvm.dll 路径的位置没有找到匹配的 JRE,JVM 将不会启动。

在 Windows 上,您可以使用 _ALT_JAVA_HOME_DIR 环境变量覆盖 JVM 查找 JRE 的路径,尽管这是一个 HotSpot 内部选项,不能保证有效。

【讨论】:

    猜你喜欢
    • 2014-10-22
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多