【发布时间】:2013-07-01 09:54:06
【问题描述】:
我在这里找到了一些关于我的问题的很好的 Q/A,但找不到合适的。
我有一个barcode reader,它可以读取条形码并将扫描的代码作为键盘输入发送。没关系,我可以轻松捕捉输入
browser.addKeyListener(new KeyAdapter() {
@Override public void keyPressed(KeyEvent e) {
if(e.keyCode >=48 && e.keyCode <=57) {
System.out.println("number caught");
}
}
});
但是我的应用程序中会有更多输入,所以我需要知道它是通过条形码阅读器还是通过键盘发送的。 我认为可以通过在代码中添加一些计时器来验证某些“序列”读取的时间长度。
我只是想不通,(我的意思是背后的逻辑),我缺少逻辑。
- 用户正在输入一些信息,(字母数字)
- 用户希望使用条码阅读器读取条码
我试过计时器,例如
if(System.currentTimeMillis() - lastPressProcessed ??? 500) { keyListener 被触发后,但我认为我错过了一些东西。
旁注:
USB 条形码可以快速读取代码,因此可以真正快速地模拟击键,整个条形码在大约 1 秒内写入 + 进位 /r/n(也按下 enter)。
sidenote2: 条码的长度会有所不同,所以我不能在短时间内只读取一些长度并决定它是用户输入还是条码输入(最大读取数 13 + enter )。
旁注 3: 我没有条形码输入字段,我试图在“背景”上运行它。
我正在寻求关于主题的逻辑/伪代码建议。
谢谢。
编辑
经过深思熟虑后,我找到了解决方案,我将把这个 Q 留在这里,仅供其他可能发现它可用的用户使用。
解决方案 --移到回答+编辑
【问题讨论】:
-
您可以发布您的解决方案作为答案,如果它解决了您的问题,请选择它。但是,我认为您的代码不会像您认为的那样做。您说“整个条形码在大约 1 秒内写入”,但您的代码允许在两次击键之间经过 1 秒,并且仍然将输入视为扫描仪输入! “我没有条形码输入字段”,您是否有其他输入字段并且您正试图阻止扫描的数据进入这些字段?
-
无论何时 /r/n 传递给程序循环都是“关闭”的,因此会读取条形码。我将时间更改为 200 毫秒,我担心系统“滞后”。我认为这段代码满足了我的需求,我知道它并不完美,但在这件事上,我将更新我的解决方案,因为我也做了一些更改。我知道我可以发布答案,但我必须等待 2 (1?) 天才能接受。不会有 Java 输入,而是 HTML 输入。 Java 程序只是用来读取条形码并将它们发送到网页。
-
我也不担心将用户手动输入与条形码混合。在“编辑”模式下,条码扫描器将被“关闭”(在软件方面)。如果您觉得需要,请提出更多建议。
-
请参阅stackoverflow.com/a/22084579/320594 了解替代方案(尽管尚未准备好投入生产)
标签: java swt barcode-scanner keylistener