我正在使用libusb-- http://sourceforge.net/apps/trac/libusb-win32/wiki
但是,我得到:
线程“主”中的异常
java.lang.UnsatisfiedLinkError:
USBManager.usb_init()V
public class USBManager
{
static{
System.loadLibrary("libusb");
}
native void usb_init();
public USBManager()
{
usb_init();
}
}
最佳答案
您不能只使用公共本机usb_init();。然后加载这样的本机库,则JNI并非以这种方式实现。
您可以使用javah创建一个.h文件,该文件可以用来创建一个实现类中特定本机功能的库。
javac USBManager
创建一个与javah一起使用的类文件:
javah USBManager
这将在该位置生成一个文件“USBManager.h”,该文件指定要在.so / .dll中实现的功能,这些功能实现了相关的本机功能。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class USBManager */
#ifndef _Included_USBManager
#define _Included_USBManager
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: USBManager
* Method: usb_init
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_USBManager_usb_1init
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
因此,您需要导出一个名为'Java_USBManager_usb_1init'的函数,该函数采用指定的参数。
该功能无非是:
JNIEXPORT void JNICALL Java_USBManager_usb_1init (JNIEnv *, jobject) {
usb_init();
}
a blog by a Sun developer上有一个很好的简单示例,但是还有许多其他示例。