有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java调用阅读器。在DigitalPersona U.are中捕获()。U SDK不返回

我正在为一个数字人物U.are开发一个应用程序。U 4500指纹读取器和使用U.are。U 2.2.3 SDK Java API

SDK附带的示例Java应用程序可以完美地工作

然而,当我在自己的示例应用程序中尝试做同样的事情时,对读者的调用。Capture()方法永远不会返回,即使我在记录指纹时可以看到读卡器闪烁

下面是我试用过的示例代码的变体

我尝试过的其他事情:

  • 在类的实例中运行捕获代码(即不在静态上下文中)
  • 在它自己的线程中运行捕获操作,但结果是一样的
  • 使用演示应用程序中的CaptRead类

我能看到的示例和SDK示例应用之间的唯一区别是后者是一个图形应用程序。但为什么会有不同呢

拔下设备会导致呼叫失败,但出现异常。这是我能让它回来的唯一方法

import com.digitalpersona.uareu.*;

public class Main{

    static Reader r;

    public static void main(String[] args) {

        try {
            // Pick first available reader
            ReaderCollection rc = UareUGlobal.GetReaderCollection();
            rc.GetReaders();
            r = rc.get(0);
            if (r==null)
                return;

            // Open Reader
            r.Open(Reader.Priority.COOPERATIVE);
            System.out.println(r.GetStatus().status); // Outputs READY

            // The following call just hangs and never returns...
            Reader.CaptureResult
                    cr = r.Capture(Fid.Format.ISO_19794_4_2005, Reader.ImageProcessing.IMG_PROC_DEFAULT, 500, -1);
            System.out.println(cr.quality.name()); // Just to test

        } catch (UareUException e) {
            e.printStackTrace();
        }
    }
}

传递给捕获方法的最后两个参数,即两个int,分别是分辨率和超时;无限期地为超时块传递-1。这也取自示例应用程序


共 (1) 个答案

  1. # 1 楼答案

    我终于找到了一个成功的例子

    尽管看起来很奇怪,但它只在Java GUI应用程序的上下文中工作

    因此,简单地扩展JFrame并在单独的线程上启动读卡器捕获似乎就足够了

    在我能看到的SDK文档中,这个要求没有具体说明

    更新

    问题似乎比我最初想象的更严重。不仅必须在Java GUI应用程序的上下文中调用API,而且GUI还必须处于焦点位置,否则捕获调用根本不会返回

    我已经用示例SDK应用程序验证了这一点。如果应用程序未处于焦点,则Capture()方法不会返回。这也适用于C#示例,其中窗口必须处于焦点位置,这表明这是内置于解决方案附带的DLL中的

    这对于我们的场景来说很糟糕,我们想要开发一个浏览器可以与之通信的本地服务,因为当浏览器处于焦点时,Java应用程序显然不是