首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中使用Nitgen eNBioScan-C1指纹扫描仪?

如何在Java中使用Nitgen eNBioScan-C1指纹扫描仪?
EN

Stack Overflow用户
提问于 2018-01-05 22:24:43
回答 1查看 814关注 0票数 0

问题所在

我尝试在netbeans的java代码中加载NBioBSPJNI.dll文件。它给出了以下异常

"java.lang.UnsatisfiedLinkError: C:\DLL\NBioBSPJNI.dll:找不到依赖库“。

我试图解决的问题

我将dll文件粘贴到java.library.path中。也在sysWOW64文件夹中。

我想这是一个JNI dll文件。如何在java代码中使用此JNI dll来连接指纹扫描仪设备。

我的源码:

包bioenable;

导入com.nitgen.SDK.BSP.NBioBSPJNI;

公共类NBioAPI_JavaUITest扩展了javax.swing.JDialog {

代码语言:javascript
复制
/** Creates new form NBioAPI_JavaUITest */
public NBioAPI_JavaUITest(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();

    addWindowListener(new java.awt.event.WindowAdapter() {
        public void windowClosing(java.awt.event.WindowEvent e) {
            Closing();
            System.exit(0);
        }
    });

    bsp = new NBioBSPJNI();

    if (CheckError())
        return ;

    setTitle("NBioAPI_JavaUITest BSP version: " + bsp.GetVersion());

    bsp.OpenDevice();

    if (CheckError())  {
        btnCapture.setEnabled(false);
        btnEnroll.setEnabled(false);
    }
    else
        labelStatus.setText("NBioBSP Initialize success");
}

public void dispose()
{
    if (bsp != null) {
        bsp.CloseDevice();
        bsp.dispose();
        bsp = null;
    }
}

private Boolean CheckError()
{
    if (bsp.IsErrorOccured())  {
        labelStatus.setText("NBioBSP Error Occured [" + bsp.GetErrorCode() + "]");
        return true;
    }

    return false;
}

private Boolean SetWindowOption()
{
    if (winOption != null)
        winOption = null;

    winOption = bsp.new WINDOW_OPTION();

    if (ShowStyle.isSelected(rbtnPopup.getModel()))  {
        winOption.WindowStyle = NBioBSPJNI.WINDOW_STYLE.POPUP;

        if (checkNFI.isSelected())
            winOption.WindowStyle |= NBioBSPJNI.WINDOW_STYLE.NO_FPIMG;

        if (checkNTMW.isSelected())
            winOption.WindowStyle |= NBioBSPJNI.WINDOW_STYLE.NO_TOPMOST;

        if (checkNWP.isSelected())
            winOption.WindowStyle |= NBioBSPJNI.WINDOW_STYLE.NO_WELCOME;
    }
    else  {
        winOption.WindowStyle = NBioBSPJNI.WINDOW_STYLE.INVISIBLE;

        if (checkSFW.isSelected())
            winOption.FingerWnd = FPWindow;
    }

    String szValue;

    szValue = textCaption.getText();

    if (szValue.length() > 0)
        winOption.CaptionMsg = szValue;

    szValue = textCancel.getText();

    if (szValue.length() > 0)
        winOption.CancelMsg = szValue;

    if (checkLThumb.isSelected())
        winOption.DisableFingerForEnroll0 = 0;
    else
        winOption.DisableFingerForEnroll0 = 1;

    if (checkLIndex.isSelected())
        winOption.DisableFingerForEnroll1 = 0;
    else
        winOption.DisableFingerForEnroll1 = 1;

    if (checkLMiddle.isSelected())
        winOption.DisableFingerForEnroll2 = 0;
    else
        winOption.DisableFingerForEnroll2 = 1;

    if (checkLRing.isSelected())
        winOption.DisableFingerForEnroll3 = 0;
    else
        winOption.DisableFingerForEnroll3 = 1;

    if (checkLLittle.isSelected())
        winOption.DisableFingerForEnroll4 = 0;
    else
        winOption.DisableFingerForEnroll4 = 1;

    if (checkRThumb.isSelected())
        winOption.DisableFingerForEnroll5 = 0;
    else
        winOption.DisableFingerForEnroll5 = 1;

    if (checkRIndex.isSelected())
        winOption.DisableFingerForEnroll6 = 0;
    else
        winOption.DisableFingerForEnroll6 = 1;

    if (checkRMiddle.isSelected())
        winOption.DisableFingerForEnroll7 = 0;
    else
        winOption.DisableFingerForEnroll7 = 1;

    if (checkRRing.isSelected())
        winOption.DisableFingerForEnroll8 = 0;
    else
        winOption.DisableFingerForEnroll8 = 1;

    if (checkRLittle.isSelected())
        winOption.DisableFingerForEnroll9 = 0;
    else
        winOption.DisableFingerForEnroll9 = 1;

    try  {
        szValue = textFpColorR.getText();
        winOption.FPForeColorR = Integer.parseInt(szValue);

        szValue = textFpColorG.getText();
        winOption.FPForeColorG = Integer.parseInt(szValue);

        szValue = textFpColorB.getText();
        winOption.FPForeColorB = Integer.parseInt(szValue);

        szValue = textBKColorR.getText();
        winOption.FPBackColorR = Integer.parseInt(szValue);

        szValue = textBKColorG.getText();
        winOption.FPBackColorG = Integer.parseInt(szValue);

        szValue = textBKColorB.getText();
        winOption.FPBackColorB = Integer.parseInt(szValue);
    }
    catch (NumberFormatException e) {
        labelStatus.setText("Invalid Input value");
        return false;
    }

    return true;
}



public void Closing()
{
    dispose();
}

private void rbtnPopupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rbtnPopupActionPerformed
    checkNFI.setEnabled(true);
    checkNTMW.setEnabled(true);
    checkNWP.setEnabled(true);

    textFpColorR.setEnabled(false);
    textFpColorG.setEnabled(false);
    textFpColorB.setEnabled(false);

    textBKColorR.setEnabled(false);
    textBKColorG.setEnabled(false);
    textBKColorB.setEnabled(false);

    checkSFW.setEnabled(false);
}//GEN-LAST:event_rbtnPopupActionPerformed

private void rbtnInvisibleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rbtnInvisibleActionPerformed
    checkNFI.setEnabled(false);
    checkNTMW.setEnabled(false);
    checkNWP.setEnabled(false);

    textFpColorR.setEnabled(true);
    textFpColorG.setEnabled(true);
    textFpColorB.setEnabled(true);

    textBKColorR.setEnabled(true);
    textBKColorG.setEnabled(true);
    textBKColorB.setEnabled(true);

    checkSFW.setEnabled(true);
}//GEN-LAST:event_rbtnInvisibleActionPerformed

private void btnCaptureActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCaptureActionPerformed
    labelStatus.setText("Capture start");

    NBioBSPJNI.FIR_HANDLE hFIR = bsp.new FIR_HANDLE();

    if (SetWindowOption() == false)  {
        labelStatus.setText("Set Windows Option failed");
        return ;
    }

    bsp.Capture(NBioBSPJNI.FIR_PURPOSE.VERIFY, hFIR, -1, null, winOption);

    if (CheckError())
        return ;

    hFIR.dispose();
    hFIR = null;

    labelStatus.setText("Capture success");
}//GEN-LAST:event_btnCaptureActionPerformed

private void btnEnrollActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEnrollActionPerformed
    labelStatus.setText("Enroll start");

    NBioBSPJNI.FIR_HANDLE hFIR = bsp.new FIR_HANDLE();

    if (SetWindowOption() == false)  {
        labelStatus.setText("Set Windows Option failed");
        return ;
    }

    bsp.Enroll(null, hFIR, null, -1, null, winOption);

    if (CheckError())
        return ;

    hFIR.dispose();
    hFIR = null;

    labelStatus.setText("Enroll success");
}//GEN-LAST:event_btnEnrollActionPerformed

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            NBioAPI_JavaUITest dialog = new NBioAPI_JavaUITest(new javax.swing.JFrame(), true);
            dialog.setVisible(true);
        }
    });
}

// NBioBSPJNI Variables
NBioBSPJNI                  bsp;
NBioBSPJNI.WINDOW_OPTION    winOption;

// Variables declaration - do not modify//GEN-BEGIN:variables
private java.awt.Canvas FPWindow;
private javax.swing.ButtonGroup ShowStyle;
private javax.swing.JButton btnCapture;
private javax.swing.JButton btnEnroll;
private javax.swing.JCheckBox checkLIndex;
private javax.swing.JCheckBox checkLLittle;
private javax.swing.JCheckBox checkLMiddle;
private javax.swing.JCheckBox checkLRing;
private javax.swing.JCheckBox checkLThumb;
private javax.swing.JCheckBox checkNFI;
private javax.swing.JCheckBox checkNTMW;
private javax.swing.JCheckBox checkNWP;
private javax.swing.JCheckBox checkRIndex;
private javax.swing.JCheckBox checkRLittle;
private javax.swing.JCheckBox checkRMiddle;
private javax.swing.JCheckBox checkRRing;
private javax.swing.JCheckBox checkRThumb;
private javax.swing.JCheckBox checkSFW;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel10;
private javax.swing.JPanel jPanel12;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JPanel jPanel7;
private javax.swing.JLabel labelStatus;
private javax.swing.JRadioButton rbtnInvisible;
private javax.swing.JRadioButton rbtnPopup;
private javax.swing.JTextField textBKColorB;
private javax.swing.JTextField textBKColorG;
private javax.swing.JTextField textBKColorR;
private javax.swing.JTextField textCancel;
private javax.swing.JTextField textCaption;
private javax.swing.JTextField textFpColorB;
private javax.swing.JTextField textFpColorG;
private javax.swing.JTextField textFpColorR;
// End of variables declaration//GEN-END:variables

}

错误屏幕截图是:

EN

回答 1

Stack Overflow用户

发布于 2018-01-11 06:18:52

看起来您的代码无法加载它所依赖的库。

试着用超级简单的测试用例来测试你的代码。如下所示:

代码语言:javascript
复制
public class Main {
  static {
    System.load("C:\\DLL\\NBioBSPJNI.dll");
  }
  public static void main(String [] arg) {
    System.out.println("Hello world!");
  }
}

然后,尝试找到NBioBSPJNI.dll所依赖的库。你可以随时把PATH放在上面。请注意,JVM可以加载由System.load指定的共享库,但库使用的共享库必须对JVM可见。

看起来你的代码试图加载一些依赖于不可见的库的东西。我建议在您的PATH中添加C:\\DLL

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48115526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档