我安装了一款来自Datalogic的条形码扫描仪,目的是将条形码读入Java文本字段中。然而,在Swing中扫描条形码时,结果文本是垃圾字符,无法使用。在独立的java.awt.TextField上工作正常,但将其集成到我的代码中后,也会产生垃圾非可映射字符。不知道是否需要特定的JAVA驱动程序,我已经尝试将字符串从UTF-8转换为ISO-88...,但没有成功。已经徒劳地看了两天了,非常感谢任何帮助。谢谢!-innocent
使用ALT + NumPad方法从条形码扫描器发送的键事件存在问题。当按下 ALT 键时,Java 会生成带有随机输出的 KeyTyped 事件。这个问题存在于当前版本的 Java 7 和 Java 8 JRE 中(我已在 Windows 8、Windows 7 和 Ubuntu 14 上测试了 JRE 7u67 和 JRE 8u20)。
我的解决方案是注册一个 KeyEventDispatcher,在 ALT 方法处于活动状态时阻止 KeyEvents:
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(
new AltBugFixKeyEventDispatcher());
public class AltBugFixKeyEventDispatcher implements KeyEventDispatcher {
private int i = -1;
@Override
public boolean dispatchKeyEvent(KeyEvent ke) {
if (ke.isAltDown()) {
switch (ke.getID()) {
case KeyEvent.KEY_PRESSED:
if(ke.getKeyCode() == KeyEvent.VK_ALT){
i = 0;
}else if(Character.isDigit(ke.getKeyChar())){
i++;
}else{
i = -1;
}
break;
case KeyEvent.KEY_RELEASED:
break;
case KeyEvent.KEY_TYPED:
break;
}
if(i != -1){
return true;
}
}
return false;
}
}