如何在c++中创建jvm?最好给出源码。

疯狂的兔子 发布于 2014/03/04 17:59
阅读 932
收藏 0

创建jvm已经没有问题了

#include <stdio.h>

#include <jni.h>
#include <stdlib.h>

int main() {
    // 定义用到的变量
    int res;
    JavaVM *jvm;
    JNIEnv *env;
    JavaVMInitArgs vm_args;
    JavaVMOption options[3];
    vm_args.version;
    
    // 设置初始化参数
    options[0].optionString = "-Djava.compiler=NONE";
    // classpath有多个时,用";"分隔,UNIX下以":"分割。
    options[1].optionString = "-Djava.class.path=F:\Practice\jni\bin";
    // 用于跟踪运行时的信息
    options[2].optionString = "-verbose:jni";
    // 版本号设置不能漏
    vm_args.version = JNI_VERSION_1_6;
    vm_args.nOptions = 3;
    vm_args.options = options;
    vm_args.ignoreUnrecognized = JNI_TRUE;
    // 1.初始化虚拟机
    res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
    if (res < 0)
    {
        fprintf(stderr, "Can't create Java VM\n");
        exit(1);
    }
    // 2.获取类
    jclass cls = env->FindClass("jni/test/Demo");
    // 3.获取类的方法
    jmethodID mid= env->GetMethodID(cls,"getMessage","()Ljava/lang/String;");
    // 获取Java的构造方法
    jmethodID con=env->GetMethodID(cls,"<init>","(Ljava/lang/String;)V");
    jstring strinit = env->NewStringUTF("Still is coding!");
    jvalue arg[1];
    arg[0].l = strinit;
    //env->AllocObject(cls);
    // 4.创建类的对象
    jobject obj = env->NewObjectA(cls,con,arg);
    // 调用对象的方法
    jstring msg = (jstring)env-> CallObjectMethod(obj, mid);
    
    //cout<<msg<<endl;
    char *str=(char *)env->GetStringUTFChars(msg,JNI_FALSE);
    printf("%s===",str);
    // 5.退出虚拟机
    jvm->DestroyJavaVM();
    fprintf(stdout, "Java VM destory.\n");
    return 0;

}

现在的问题是:我得class文件位于F:\Practice\jni\bin\jni\test\Demo.class,运行程序之后,爆出如下的错误

“ConsoleApplication2.exe”(Win32): 已加载“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件。
“ConsoleApplication2.exe”(Win32): 已加载“C:\Windows\System32\kernel32.dll”。无法查找或打开 PDB 文件。
“ConsoleApplication2.exe”(Win32): 已加载“C:\Windows\System32\KernelBase.dll”。无法查找或打开 PDB 文件。
“ConsoleApplication2.exe”(Win32): 已加载“D:\Java\jdk\jre\bin\client\jvm.dll”。无法查找或打开 PDB 文件。
“ConsoleApplication2.exe”(Win32): 已加载“C:\Windows\System32\user32.dll”。无法查找或打开 PDB 文件。
“ConsoleApplication2.exe”(Win32): 已加载“C:\Windows\System32\gdi32.dll”。无法查找或打开 PDB 文件。
“ConsoleApplication2.exe”(Win32): 已加载“C:\Windows\System32\lpk.dll”。无法查找或打开 PDB 文件。

求@红薯大神指教!

加载中
0
疯狂的兔子
疯狂的兔子

这是vs2012得通病 解决方案如下

1、点 调试

2、然后 选项和设置
3、右边勾上 启用源服务器支持
4、左边点 符号
5、把微软符号服务器勾
6、运行的时候等一下 莫慌!!
7、问题解决
0
红薯
红薯

第16行是哪一行啊?

疯狂的兔子
疯狂的兔子
问题已经更新了 请大红大神指教
返回顶部
顶部