从Swing中的条形码扫描仪中读取

时间:2014-04-11 18:49:34

标签: java swing barcode

我安装了Datalogic的条形码扫描器,目的是将条形码读入java文本字段。但是,当我在Swing中扫描条形码时,生成的文本是垃圾。我不能用这个。在独立的java.awt.TextField工作正常,但是当我将它集成到我的代码中时,它也会产生垃圾不可映射的字符。

不知道我是否需要JAVA的特定驱动程序, 我已经尝试将字符串从UTF-8转换为ISO-88 ......但无济于事。

自从2天以来一直在看这个。

非常感谢任何帮助。

由于

-innocent

2 个答案:

答案 0 :(得分:1)

尝试重置扫描仪以删除可能已设置的所有spurios字符/代码;即根据参考指南,扫描仪将默认发送gs1-128代码的条形码id作为转义序列,这可能会导致摆动的麻烦

http://www.datalogic.com/eng/quickscan-i-lite-qw2100-pd-163.html

下载产品参考指南

扫描条形码进入编程模式

转到相关部分并扫描代码以删除所有前导码并删除所有代码的目标标签

您还可以尝试不同类型的键盘模拟和代码页。

答案 1 :(得分:0)

使用 ALT + NumPad 方法来自条形码扫描仪的KeyEvents存在问题。 当按下ALT键时,Java会生成带有随机输出的KeyTyped事件。当前版本的Java 7和Java 8 JRE中存在问题(我在Windows 8,Windows上使用JRE 7u67和JRE 8u20测试了它7和Ubuntu 14)。

我的解决方案是注册一个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;
    }
}