创建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 文件。
求@红薯大神指教!
这是vs2012得通病 解决方案如下
1、点 调试
第16行是哪一行啊?