成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C語言項目中怎么調(diào)用java類

C語言項目中怎么調(diào)用java類,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

孫吳網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),孫吳網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為孫吳上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個售后服務(wù)好的孫吳做網(wǎng)站的公司定做!

首先需要編寫java類

public class Sample {
	
	public static void test2() {
		
		System.out.println("java打印的helloword");
	}
}

這是非常簡單的一個java類,里面就只有一個java方法。等下我們就要通過C來調(diào)用這個方法。jvm只認識class,首先得編譯它,java Sample.java。在當前目錄得到一個Sample.class的文件。這個文件等下會被我們的C程序加載。

    然后編寫C代碼。

#include <jni.h>//引入jni的頭文件,下面加載類和調(diào)用類的方法都是通過jni里面的函數(shù)實現(xiàn)的
#include <string.h>
int main() 
{ 
	JavaVMOption options[1]; 
	JNIEnv *env; 
	JavaVM *jvm; 
	JavaVMInitArgs vm_args; 
	long status; 
	jclass cls; 
	jmethodID mid; 
	jint square; 
	jboolean not; 

	options[0].optionString = "-Djava.class.path=."; //設(shè)置classpath
	memset(&vm_args, 0, sizeof(vm_args)); 
	vm_args.version = 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(env, "java/lang/Object"); 
		cls=(*env)->FindClass(env,"Sample");//通過FindClass函數(shù)找到這個類,這里需要添加類的描述符合,如果是Object就應該是java/lang/Object
		printf("find the class\n");
		if(cls !=0) 
		{
			//mid = (*env)->GetStaticMethodID(env, cls, "main", "(I)I"); 
		        mid=(*env)->GetStaticMethodID(env,cls,"main","([Ljava/lang/String;)V");//通過函數(shù)找到方法,這里面應該是方法的描述符。
			printf("find the method\n");
			if(mid !=0) 
			{
				printf("exec method\n");
				square = (*env)->CallStaticIntMethod(env, cls, mid, NULL); //執(zhí)行方法
				printf("Result of intMethod: %d\n", square); 
			} 

			mid = (*env)->GetStaticMethodID(env, cls, "booleanMethod", "(Z)Z"); 
			if(mid !=0) 
			{ not = (*env)->CallStaticBooleanMethod(env, cls, mid, 1); 
				printf("Result of booleanMethod: %d\n", not); 
			} 
		} 
		else{
			printf("not found\n");
		}
		(*jvm)->DestroyJavaVM(jvm); 
		return 0; 
	} 
	else 

		return -1; 
}

,如果直接gcc 是會報錯的,因為jni頭文件不在系統(tǒng)的頭文件里面。而且動態(tài)鏈接庫也不在系統(tǒng)默認的庫里面。所以編寫一個Makefile:

compile:
        gcc calljvm.c -I  $JAVA_HOME/include/  -I $JAVA_HOME/include/linux/  -L$JAVA_HOME/jre/lib/amd64/server/ -ljvm  -o calljvm

執(zhí)行make,順利應該編譯通過,但是執(zhí)行是會報錯的。因為libjvm.so不在/usr/lib 里面。所以得把jvm的庫加到系統(tǒng)庫路徑里面

export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/:$JAVA_HOME/jre/lib/amd64/servr

系統(tǒng)默認會在/usr/lib里面尋找動態(tài)鏈接庫,如果有LD_LIBRARY_PATH之后會優(yōu)先在LD_LIBRARY_PATH指定路徑找,如果找不到再去/usr/lib。

看完上述內(nèi)容,你們掌握C語言項目中怎么調(diào)用java類的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站名稱:C語言項目中怎么調(diào)用java類
網(wǎng)頁路徑:http://jinyejixie.com/article2/iepdic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、響應式網(wǎng)站品牌網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)、網(wǎng)站導航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
闽侯县| 商洛市| 山西省| 澄江县| 澄迈县| 潞西市| 枣庄市| 洛隆县| 锡林郭勒盟| 丹东市| 北流市| 富顺县| 武安市| 威宁| 固原市| 杭锦旗| 高邑县| 琼中| 泸州市| 锡林浩特市| 通州市| 喀什市| 宾阳县| 和顺县| 鹤山市| 天峻县| 永修县| 镇巴县| 天祝| 卢氏县| 镇远县| 裕民县| 吴桥县| 汤阴县| 宁陵县| 阳山县| 岐山县| 墨竹工卡县| 潢川县| 拜泉县| 融水|