c 调用 java

本文详细介绍了如何在C程序中调用Java代码,特别是当Java程序依赖多个jar包时,如何正确设置`java.class.path`和`-Djava.ext.dirs`以指定jar包路径。通过编写C代码、制定makefile和组织Java代码,成功实现C与Java的交互,并在服务器上执行得到结果。
摘要由CSDN通过智能技术生成

c 调用 java 时,java 程序常常 是依赖多个jar包的,关键是 如何要告诉jvm jar包的路径。

先写c代码:

1 c代码

      写调用JAVA 的C++ 代码(main.cpp)如下:
#include <iostream>
#include <jni.h>

#ifdef _WIN32
  #define PATH_SEPARATOR ';'
#else
  #define PATH_SEPARATOR ':'
#endif

using namespace std;


int main()
{

	JavaVMOption options[3];
	JNIEnv *env;
	JavaVM *jvm;
	JavaVMInitArgs vm_args;
	long status;
	jclass cls;
	jmethodID mid;
	jint square;
	jboolean not1;
	jobject jobj;

	options[0].optionString = "-Djava.class.path=/home/cInvokeJavaLinux/refjar";
	options[1].optionString="-verbose:jni";
	options[2].optionString="-Djava.ext.dirs=/home/cInvokeJavaLinux/refjar";
	
	
	vm_args.version =JNI_VERSION_1_6;// JNI_VERSION_1_2;
	vm_args.nOptions = 3;
	vm_args.options = options;



/*	options[0].optionString = "-Djava.class.path=.";
	vm_args.version =JNI_VERSION_1_6;// JNI_VERSION_1_2;
	vm_args.nOptions = 1;
	vm_args.options = options;
*/


	status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
	/*
	if (status != JNI_ERR)
	{
		cls = env->FindClass("com/testJni/testDemo/C2java");
		if(cls !=0)
		{ 
			mid = env->GetStaticMethodID( cls, "add", "(II)I");
			if(mid !=0)
			{  
				square = env->CallStaticIntMethod( cls, mid, 5,5);
				std::cout << square << std::endl;
			}
			mid = env->GetMethodID(cls,"<init>","()V");
			if(mid !=0)
			{  
				jobj=env->NewObject(cls,mid);
				std::cout << "init ok" << std::endl;
			}
			mid = env->GetMethodID( cls, "judge",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值