javah导出类的头文件抛出异常——java.lang.IllegalArgumentException: Not a valid class name(原因及解决方法)

【0】README

0.1) 本文旨在给出 java.lang.IllegalArgumentException 异常的原因 和 处理方法, 该异常和 javah 没有半毛钱关系 ;
0.2) 本文附带地给出了 javah 的作用 和 java 调用本地代码(如 C语言)的相关知识;


【1】intro to javah (java 调用本地代码(如C)相关)

1)重载本地方法: 如果你重载本地方法, 也就是说, 你用相同的名字提供多个本地方法, 那么你必须在名称后面附加两个下划线, 后面再加上已编码的参数类型;
2) 看个荔枝: 如果你有一个本地方法 greeting 和 本地方法 greeting(int repeat), 那么第一个称为

Java_HelloNative_greeting__, 第二个称为 Java_HelloNative_greeting_I;

3)javah程序:没有人完成这些手工操作, javah 自动生成函数名,即javah导出类的头文件; (干货——javah 的功能)
4)具体荔枝:

  • 4.1)java 类 如下:
package com.corejava.chapter12;

public class HelloNative
{  
   public static native void greeting();
}
  • 4.2)编译该java 类:

  • 4.3)利用 javah 自动生成函数名(javah [your package].HelloNative 会产生一个头文件 如 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 __cplusplus
    
    extern "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)抛出异常原因: 编译器对文件(带有文件分隔符 和 扩展名.java 的文件)进行操作, 而java 解释器加载类(带有点(.)分隔符; for detailed spec, please visit section 4(‘将类放入包中’) in http://blog.csdn.net/pacosonswjtu/article/details/49536995

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值