【发布时间】:2021-06-02 15:28:24
【问题描述】:
我正在为 DigitalPersona U.are.U 4500 指纹读取器开发应用程序,并使用 U.are.U 2.2.3 SDK Java API。
SDK 附带的示例 Java 应用程序可以完美运行。
但是,当我尝试在自己的示例应用程序中做同样的事情时,对 Reader.Capture() 方法的调用永远不会返回,即使在记录我的指纹时我可以看到读取器在闪烁。
以下是我尝试过的示例代码的变体。
我尝试过的其他事情:
- 在类的实例中运行捕获代码(即不在静态上下文中)
- 也在自己的线程中运行捕获操作,但结果相同。
- 使用演示应用程序中的 CaptureThread 类
我可以看到我的示例和 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();
}
}
}
传递给Capture方法的最后两个参数,两个int,分别是分辨率和超时时间;无限期地为超时块传递-1。这也取自示例应用程序。
【问题讨论】:
-
嗯...如果
-1意味着永远等待,那么设置一些超时时间并查看是否返回异常或任何其他可以提供更多提示的错误? (只是一个有根据的猜测......) -
我想我可以尝试一下,但就像我说的那样,相同的设置在示例应用程序中可以完美运行。当我在 SDK 示例应用程序中用手指触摸阅读器时,该方法直接返回。我会尝试并让您知道它是否返回任何有意义的结果。
-
好的,所以给它一个超时只会返回一个带有标志的结果,表明它已经超时,没有别的。