javah导出类的头文件抛出异常——java.lang.IllegalArgumentException: Not a valid class name(原因及解决方法)
【0】README
0.1) 本文旨在給出 java.lang.IllegalArgumentException 異常的原因 和 處理方法, 該異常和 javah 沒(méi)有半毛錢關(guān)系 ;
0.2) 本文附帶地給出了 javah 的作用 和 java 調(diào)用本地代碼(如 C語(yǔ)言)的相關(guān)知識(shí);
【1】intro to javah (java 調(diào)用本地代碼(如C)相關(guān))
1)重載本地方法: 如果你重載本地方法, 也就是說(shuō), 你用相同的名字提供多個(gè)本地方法, 那么你必須在名稱后面附加兩個(gè)下劃線, 后面再加上已編碼的參數(shù)類型;
2) 看個(gè)荔枝: 如果你有一個(gè)本地方法 greeting 和 本地方法 greeting(int repeat), 那么第一個(gè)稱為
Java_HelloNative_greeting__, 第二個(gè)稱為 Java_HelloNative_greeting_I;
3)javah程序:沒(méi)有人完成這些手工操作, javah 自動(dòng)生成函數(shù)名,即javah導(dǎo)出類的頭文件; (干貨——javah 的功能)
4)具體荔枝:
- 4.1)java 類 如下:
4.2)編譯該java 類:
4.3)利用 javah 自動(dòng)生成函數(shù)名(javah [your package].HelloNative 會(huì)產(chǎn)生一個(gè)頭文件 如 com_corejava_chapter12_HelloNative.h)
4.4) source code of com_corejava_chapter12_HelloNative.h at a glance
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_corejava_chapter12_HelloNative */#ifndef _Included_com_corejava_chapter12_HelloNative#define _Included_com_corejava_chapter12_HelloNative#ifdef __cplusplusextern "C" {#endif/** Class: com_corejava_chapter12_HelloNative* Method: greeting* Signature: ()V*/ JNIEXPORT void JNICALL Java_com_corejava_chapter12_HelloNative_greeting(JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif
5)拋出異常原因: 編譯器對(duì)文件(帶有文件分隔符 和 擴(kuò)展名.java 的文件)進(jìn)行操作, 而java 解釋器加載類(帶有點(diǎn)(.)分隔符; for detailed spec, please visit section 4(‘將類放入包中’) in http://blog.csdn.net/pacosonswjtu/article/details/49536995
總結(jié)
以上是生活随笔為你收集整理的javah导出类的头文件抛出异常——java.lang.IllegalArgumentException: Not a valid class name(原因及解决方法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 冰箱冬季开关怎么设置(冰箱冬季开关怎么设
- 下一篇: 本地方法(JNI)——从java 程序中