c++获取java的运行路径,c++调用java时最好设立自定义类路径

c++调用java时最好设置自定义类路径

最近在学习C++调用java类的流程,在按照网上示例做的过程中遇到了一些小问题,今天才得以彻底解决

按照网上的例子做完后发现程序运行总是失败,原因在于自定义的类JVM无法找到,例子只说让自己编写自定义的类,但并没有说生成的类应该放在什么地方才可以被JVM正确的找到,通常根据需要我们的类是房子特定的目录下的,而且放在jvm路径下也是不安全的,所以在网上的大多数例子都缺少一步,设置自定义类的路径

int main(){

JavaVM *jvm;

JNIEnv *env;

JavaVMInitArgs vm_args;

JavaVMOption options[3];

vm_args.version=JNI_VERSION_1_4;

/*设置初始化参数*/

options[0].optionString = "-Djava.compiler=NONE";

/*类路径,相对或绝对,可设多个,分号隔开*/

options[1].optionString = "-Djava.class.path=C:\\java\\RTMP\\bin;";

options[2].optionString = " -Djava.library.path=C:\\java\\RTMP\\lib";

options[3].optionString ="-verbose:jni";

vm_args.nOptions =3;

vm_args.options = options;

vm_args.ignoreUnrecognized = JNI_TRUE;

//------------------------------加载jvm:

HINSTANCE jvmDll = LoadLibrary("D:\\Program Files\\Java\\jre1.6.0_07\\bin\\client\\jvm.dll");

if (jvmDll == NULL) printf("加载JVM动态库错误。%l", ::GetLastError());

//查找JNI_CreateJavaVM过程。

JNICREATEPROC jvmCreateProc = (JNICREATEPROC)GetProcAddress(jvmDll, "JNI_CreateJavaVM");

if (jvmCreateProc == NULL)

{

FreeLibrary(jvmDll);

printf("查找JNI_CreateJavaVM过程错误。%l", ::GetLastError());

}

//创建JVM:

int res = (jvmCreateProc)(&jvm, (void **)&env, &vm_args);

if (res < 0 || jvm == NULL || env == NULL)

{

FreeLibrary(jvmDll);

printf( "创建JVM发生错误。");

}

//---------------------------------------------

jclass jcl = env->FindClass("RTMPHandshake");//加载启动类

if (env->ExceptionCheck() == JNI_TRUE || jcl == NULL)

{

FreeLibrary(jvmDll);

printf("加载启动类失败。");

}

jmethodID mid = env->GetMethodID(jcl,"generateResponse","([Ljava/lang/String;)V");//此处的参数意义见注解1

if (env->ExceptionCheck() == JNI_TRUE || mid == NULL)

{

FreeLibrary(jvmDll);

printf("查找启动方法失败。");

}

//-------------------------调用方法:

env-> CallObjectMethod( jcl, mid); //第3,4…参数就是被调方法的参数

FreeLibrary(jvmDll);

}

注意:

/*自定义类、库路径,相对或绝对,可设多个,分号隔开*/

options[1].optionString = "-Djava.class.path=C:\\java\\RTMP\\bin;";

options[2].optionString = " -Djava.library.path=C:\\java\\RTMP\\lib";

现在总算调试通过了,真高兴

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值