我正在使用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上有一个很好的简单示例,但是还有许多其他示例。

07-24 14:01