你从最简单的开始写咯,public class A {public native int methodA()} 编译后运行javah A应该可以生成 A.h吧,里面应该有方法声明吧?或者你贴你的代码出来
package com.kcsj.bz;import javax.swing.JPanel;import com.kcsj.dao.entity.ByteBuff;public class FingerprintDriverControler { /*===========================错误码表===========================*/ public static final int RUN_SUCCESS = 0;//成功 public static final int ERR_FAILED_INIT = 1;//初始化失败 public static final int ERR_FAILED_CALLDB = 2;//数据库操作失败 public static final int ERR_MISTAKE_PARAM = 3;//参数错误 public static final int ERR_FAILED_FUNCTION = 4;//方法执行失败 public static final int ERR_OVERFLOW_MEMORY = 5;//内存溢出 public static final int ERR_OVERFLOW_TIME = 6;//超时 public static final int ERR_VERIFICATION_FAILED = 7;//验证失败 public static final int ERR_UNKOWN_ERROR = 8;//未知错误 public static final int ERR_ABSENCE_DEVICE = 9;//没有设备
编译后运行javah A应该可以生成 A.h吧,里面应该有方法声明吧?或者你贴你的代码出来
package com.kcsj.bz;import javax.swing.JPanel;import com.kcsj.dao.entity.ByteBuff;public class FingerprintDriverControler
{
/*===========================错误码表===========================*/
public static final int RUN_SUCCESS = 0;//成功
public static final int ERR_FAILED_INIT = 1;//初始化失败
public static final int ERR_FAILED_CALLDB = 2;//数据库操作失败
public static final int ERR_MISTAKE_PARAM = 3;//参数错误
public static final int ERR_FAILED_FUNCTION = 4;//方法执行失败
public static final int ERR_OVERFLOW_MEMORY = 5;//内存溢出
public static final int ERR_OVERFLOW_TIME = 6;//超时
public static final int ERR_VERIFICATION_FAILED = 7;//验证失败
public static final int ERR_UNKOWN_ERROR = 8;//未知错误
public static final int ERR_ABSENCE_DEVICE = 9;//没有设备
/*=============================常量值表==========================*/
public static final int DEVTYPE_762164 = 1;//762164设备类型
public static final int MAX_FP_WIDTH = 512;//指纹图象宽度
public static final int MAX_FP_HEIGHT = 512;//指纹图象高度
public static final int DEF_EXT_MINSIZE = 1024;//指纹特征值大小
public static final int DEF_REG_MINSIZE = 1024;//指纹特征值大小
/*=======================================需要在本地封闭的一些方法==================================*/
/*=============================1设备初始化==================================*/
/**
*功能:初始化设备
*参数:deviceType 设备类型,取值 1(或用常量 DEVTYPE_762164)
*返回:成功返回 0 (RUN_SUCCESS)
*备注:应用程序启动后必须先调用此方法才能进行后续方法使用。
*/
public native int driverInit(int deviceType);
/*==============================2关闭设备===================================*/
/**
*功能:关闭设备
*参数:无
*返回:成功返回 0 (RUN_SUCCESS)
*备注:应用程序退出之前必须先调用此方法关闭设备。
*/
public native int driverExit();
/*===============================3获得亮度值==================================*/
/**
*功能:获得亮度值
*参数:val 亮度的返回值,值范围 0 ~ 255
*返回:成功返回 0 (RUN_SUCCESS)
*备注:
*/
public native int getBrightness(Byte val);
/*===============================4获得对比度值================================*/
/**
* 功能:获得对比度值
*参数:val 对比度的返回值,值范围 0 ~ 255
*返回:成功返回 0 (RUN_SUCCESS)
*备注:
*/
public native int getContrast(Byte val);
/*==================================5设置亮度===============================*/
/**
* 功能:设置亮度
*参数:val 亮度值,值范围 0 ~ 255
*返回:成功返回 0 (RUN_SUCCESS)
*备注:亮度值建议设置在180 ~ 255,推荐255
*/
public native int setBrightness(Byte val);
/*===================================6设置对比度==============================*/
/**
* 功能:设置对比度
*参数:val 对比值,值范围 0 ~ 255
*返回:成功返回 0 (RUN_SUCCESS)
*备注:对比度值建议设置在 200 以上,推荐255
*/
public native int setContrast(Byte val);
/*===================================7采集指纹图象============================*/
/**
* 功能:采集指纹图象
*参数:imgBuff 返回指纹图象的缓冲区,大小为 512 * 512 字节;
* time 采集超时时间,单位秒,建议 5 ~ 10 。
* dispWnd 要显示指纹图象的window句柄,一般使用图片框,也可Panel等。
* quality 指纹图象质量要求,取值 0 ~ 255,建议50 ~ 75 ,推荐 65 或 70 。
* 取值太低将会使采集的图象不完整便返回,不足以提取有效的指纹特征。
* 取值太高(超过80)将无法采集到确切的指纹图象。
*返回:成功返回 0 (RUN_SUCCESS)
*备注:提取指纹特征值之前,必须先采集指纹图象
*/
public native int getLiveImage(ByteBuff imgBuff, int time, JPanel disWnd, int quality);
/*============================8从指纹图象中提取指纹特征值=======================*/
/**
* 功能:从指纹图象中提取指纹特征值
*参数:imgBuff 指纹图象的缓冲区(通过getLiveImage返回的imgBuff);
min 指纹特征值,大小为 1024 字节 。
*返回:成功返回 0 (RUN_SUCCESS)
*备注:提取指纹特征值,以便进行指纹注册、比对
*/
public native int getMinutiae(ByteBuff imgBuff, ByteBuff min);
/*==================================9 注册指纹==================================*/
/**
* 功能:注册指纹
* 参数: min1 第一次采集的指纹特征值(通过FPMGetMinutiae获得);
* min2 第二次采集的指纹特征值;
* min3 第三次采集的指纹特征值;
* regMin 输出的注册成功的指纹特征值,大小为 1024 字节;
* secuLevel 安全等级,取值 1 ~ 9 ,推荐 3
* 返回:成功返回 0 (RUN_SUCCESS)
* 备注:注册登记指纹时,每枚手指要采集3次,经过3次采集后的min,调用此方法进行注册验证,如
* 果3次采集的指纹不匹配,则登记失败,如能匹配,则登记成功,将把最终的特征值返回在
* regMin中,大小是1024。请保存该regMin到文件或数据库中,或其他您自定义的存储方式,以备以后进行指纹比对。
* 存储时,务必将该特征值与用户ID号绑定在一起,例如如以文件方式保存,则可用用户ID做文件名。
* 存储在数据库中时,可以将指纹特征值转换为文本形式。
* 每次指纹采集时,请先移开手指,再按下,这样有利于采集到同一枚指纹更多的特征面。
*/
public native int matchForRegister(ByteBuff min1, ByteBuff min2, ByteBuff min3,
ByteBuff regMin, int secuLevel);
/*=====================================10验证指纹===================================*/
/**
* 功能: 验证指纹
* 参数: inMin 要验证的指纹特征值;
* regMin 已登记的指纹特征值;
* secuLevel 安全等级,推荐值 3 。
* 返回: 成功返回 0 (RUN_SUCCESS)
* 备注: 该方法也称 1:1 比对方式。
* 先根据用户ID,提取用户已登记的指纹特征值 regMin;调用 FPMGetLiveImage 和
* FPMGetMinutiae 获得当前要比对的用户的指纹特征值 inMin;然后使用该方法进行比对,如返回
* 成功,则说明当前用户就是该ID的用户。
* 1:1比对方式快捷、安全度高,但不能自动识别出用户,需要用户输入ID,类似于传统的密码验证方式,
* 由用户ID获取密码段,与当前的输入密码进行比对以确定用户是否正确。
*/
public native int Verification(ByteBuff inMin, ByteBuff regMin, int secuLevel);
/*=====================================================================================================*/
/*================================载入本地动态库================================*/
static
{
System.loadLibrary(FingerprintDriverControler);
}
}ByteBuff 是自定义的一个类,封装了字节数组。
生成的源码如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_kcsj_bz_FingerprintDriverControler */#ifndef _Included_com_kcsj_bz_FingerprintDriverControler
#define _Included_com_kcsj_bz_FingerprintDriverControler
#ifdef __cplusplus
extern "C" {
#endif
#undef com_kcsj_bz_FingerprintDriverControler_RUN_SUCCESS
#define com_kcsj_bz_FingerprintDriverControler_RUN_SUCCESS 0L
#undef com_kcsj_bz_FingerprintDriverControler_ERR_FAILED_INIT
#define com_kcsj_bz_FingerprintDriverControler_ERR_FAILED_INIT 1L
#undef com_kcsj_bz_FingerprintDriverControler_ERR_FAILED_CALLDB
#define com_kcsj_bz_FingerprintDriverControler_ERR_FAILED_CALLDB 2L
#undef com_kcsj_bz_FingerprintDriverControler_ERR_MISTAKE_PARAM
#define com_kcsj_bz_FingerprintDriverControler_ERR_MISTAKE_PARAM 3L
#undef com_kcsj_bz_FingerprintDriverControler_ERR_FAILED_FUNCTION
#define com_kcsj_bz_FingerprintDriverControler_ERR_FAILED_FUNCTION 4L
#undef com_kcsj_bz_FingerprintDriverControler_ERR_OVERFLOW_MEMORY
#define com_kcsj_bz_FingerprintDriverControler_ERR_OVERFLOW_MEMORY 5L
#undef com_kcsj_bz_FingerprintDriverControler_ERR_OVERFLOW_TIME
#define com_kcsj_bz_FingerprintDriverControler_ERR_OVERFLOW_TIME 6L
#undef com_kcsj_bz_FingerprintDriverControler_ERR_VERIFICATION_FAILED
#define com_kcsj_bz_FingerprintDriverControler_ERR_VERIFICATION_FAILED 7L
#undef com_kcsj_bz_FingerprintDriverControler_ERR_UNKOWN_ERROR
#define com_kcsj_bz_FingerprintDriverControler_ERR_UNKOWN_ERROR 8L
#undef com_kcsj_bz_FingerprintDriverControler_ERR_ABSENCE_DEVICE
#define com_kcsj_bz_FingerprintDriverControler_ERR_ABSENCE_DEVICE 9L
#undef com_kcsj_bz_FingerprintDriverControler_DEVTYPE_762164
#define com_kcsj_bz_FingerprintDriverControler_DEVTYPE_762164 1L
#undef com_kcsj_bz_FingerprintDriverControler_MAX_FP_WIDTH
#define com_kcsj_bz_FingerprintDriverControler_MAX_FP_WIDTH 512L
#undef com_kcsj_bz_FingerprintDriverControler_MAX_FP_HEIGHT
#define com_kcsj_bz_FingerprintDriverControler_MAX_FP_HEIGHT 512L
#undef com_kcsj_bz_FingerprintDriverControler_DEF_EXT_MINSIZE
#define com_kcsj_bz_FingerprintDriverControler_DEF_EXT_MINSIZE 1024L
#undef com_kcsj_bz_FingerprintDriverControler_DEF_REG_MINSIZE
#define com_kcsj_bz_FingerprintDriverControler_DEF_REG_MINSIZE 1024L
#ifdef __cplusplus
}
#endif
#endif
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class FingerprintDriverControler */#ifndef _Included_FingerprintDriverControler
#define _Included_FingerprintDriverControler
#ifdef __cplusplus
extern "C" {
#endif
#undef FingerprintDriverControler_RUN_SUCCESS
#define FingerprintDriverControler_RUN_SUCCESS 0L
#undef FingerprintDriverControler_ERR_FAILED_INIT
#define FingerprintDriverControler_ERR_FAILED_INIT 1L
#undef FingerprintDriverControler_ERR_FAILED_CALLDB
#define FingerprintDriverControler_ERR_FAILED_CALLDB 2L
#undef FingerprintDriverControler_ERR_MISTAKE_PARAM
#define FingerprintDriverControler_ERR_MISTAKE_PARAM 3L
#undef FingerprintDriverControler_ERR_FAILED_FUNCTION
#define FingerprintDriverControler_ERR_FAILED_FUNCTION 4L
#undef FingerprintDriverControler_ERR_OVERFLOW_MEMORY
#define FingerprintDriverControler_ERR_OVERFLOW_MEMORY 5L
#undef FingerprintDriverControler_ERR_OVERFLOW_TIME
#define FingerprintDriverControler_ERR_OVERFLOW_TIME 6L
#undef FingerprintDriverControler_ERR_VERIFICATION_FAILED
#define FingerprintDriverControler_ERR_VERIFICATION_FAILED 7L
#undef FingerprintDriverControler_ERR_UNKOWN_ERROR
#define FingerprintDriverControler_ERR_UNKOWN_ERROR 8L
#undef FingerprintDriverControler_ERR_ABSENCE_DEVICE
#define FingerprintDriverControler_ERR_ABSENCE_DEVICE 9L
#undef FingerprintDriverControler_DEVTYPE_762164
#define FingerprintDriverControler_DEVTYPE_762164 1L
#undef FingerprintDriverControler_MAX_FP_WIDTH
#define FingerprintDriverControler_MAX_FP_WIDTH 512L
#undef FingerprintDriverControler_MAX_FP_HEIGHT
#define FingerprintDriverControler_MAX_FP_HEIGHT 512L
#undef FingerprintDriverControler_DEF_EXT_MINSIZE
#define FingerprintDriverControler_DEF_EXT_MINSIZE 1024L
#undef FingerprintDriverControler_DEF_REG_MINSIZE
#define FingerprintDriverControler_DEF_REG_MINSIZE 1024L
/*
* Class: FingerprintDriverControler
* Method: driverInit
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_FingerprintDriverControler_driverInit
(JNIEnv *, jobject, jint);/*
* Class: FingerprintDriverControler
* Method: driverExit
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_FingerprintDriverControler_driverExit
(JNIEnv *, jobject);/*
* Class: FingerprintDriverControler
* Method: getBrightness
* Signature: (Ljava/lang/Byte;)I
*/
JNIEXPORT jint JNICALL Java_FingerprintDriverControler_getBrightness
(JNIEnv *, jobject, jobject);/*
* Class: FingerprintDriverControler
* Method: getContrast
* Signature: (Ljava/lang/Byte;)I
*/
JNIEXPORT jint JNICALL Java_FingerprintDriverControler_getContrast
(JNIEnv *, jobject, jobject);/*
* Class: FingerprintDriverControler
* Method: setBrightness
* Signature: (Ljava/lang/Byte;)I
*/
JNIEXPORT jint JNICALL Java_FingerprintDriverControler_setBrightness
(JNIEnv *, jobject, jobject);/*
* Class: FingerprintDriverControler
* Method: setContrast
* Signature: (Ljava/lang/Byte;)I
*/
JNIEXPORT jint JNICALL Java_FingerprintDriverControler_setContrast
(JNIEnv *, jobject, jobject);/*
* Class: FingerprintDriverControler
* Method: getLiveImage
* Signature: (LByteBuff;ILjavax/swing/JPanel;I)I
*/
JNIEXPORT jint JNICALL Java_FingerprintDriverControler_getLiveImage
(JNIEnv *, jobject, jobject, jint, jobject, jint);/*
* Class: FingerprintDriverControler
* Method: getMinutiae
* Signature: (LByteBuff;LByteBuff;)I
*/
JNIEXPORT jint JNICALL Java_FingerprintDriverControler_getMinutiae
(JNIEnv *, jobject, jobject, jobject);/*
* Class: FingerprintDriverControler
* Method: matchForRegister
* Signature: (LByteBuff;LByteBuff;LByteBuff;LByteBuff;I)I
*/
JNIEXPORT jint JNICALL Java_FingerprintDriverControler_matchForRegister
(JNIEnv *, jobject, jobject, jobject, jobject, jobject, jint);/*
* Class: FingerprintDriverControler
* Method: Verification
* Signature: (LByteBuff;LByteBuff;I)I
*/
JNIEXPORT jint JNICALL Java_FingerprintDriverControler_Verification
(JNIEnv *, jobject, jobject, jobject, jint);#ifdef __cplusplus
}
#endif
#endif
其实我一直都是用手工生成的,但是一直生成不了,刚试了还是这样。难道是这javah.exe有问题?我再下个其他版本的JDK试试吧。谢谢大哥帮忙了!