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

Java 从Swing中的条形码扫描仪读取,java,swing,barcode,Java,Swing,Barcode,我从Datalogic安装了一个条形码扫描仪,目标是将条形码读入java文本字段。然而,当我在Swing中扫描条形码时,得到的文本是垃圾。我不能用这个。在独立的java.awt.TextField上运行良好,但当我将其集成到代码中时,它也会生成垃圾不可映射字符 不知道我是否需要JAVA的特定驱动程序, 我已尝试将字符串从UTF-8转换为ISO-88。。。无济于事 两天以来一直在看这个,但都是徒劳的 任何帮助都将不胜感激 谢谢 -innocent尝试重置扫描仪以删除所有可能已设置的伪字符/代码;i

我从Datalogic安装了一个条形码扫描仪,目标是将条形码读入java文本字段。然而,当我在Swing中扫描条形码时,得到的文本是垃圾。我不能用这个。在独立的java.awt.TextField上运行良好,但当我将其集成到代码中时,它也会生成垃圾不可映射字符

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

两天以来一直在看这个,但都是徒劳的

任何帮助都将不胜感激

谢谢


-innocent

尝试重置扫描仪以删除所有可能已设置的伪字符/代码;i、 e.根据参考指南,扫描器将默认发送gs1-128代码的条形码id作为转义序列,这可能会给swing带来一些麻烦

从下载产品参考指南

扫描条形码以进入编程模式

转至相关章节并扫描代码,以删除所有前置码并删除所有代码的aim标签


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

使用ALT+NumPad方法从条形码扫描仪发出的按键事件有问题按下ALT键时,Java会生成带有随机输出的键型事件。当前版本的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;
    }
}

大多数条形码扫描器模拟键盘——就Java而言,它应该像键入文本一样工作。但是扫描器通常也可以配置成不同的模式,这可能涉及到额外的控制字符,可能会弄乱文本。您的扫描仪是否能正常扫描文本文档?扫描仪是否有任何可能重要的配置选项?扫描仪的确切型号是什么?此外,为了进行调试,请尝试在字段中添加一个按键侦听器,该字段仅打印出所有
键入的
字符(可能还有按键按下和释放按键代码)。您可能可以识别出有问题的击键,并将其映射到“不做任何事情”操作,这样它们就不会以文本形式输出。多亏了非swing文本字段,是的。然而,当我把它集成到我的主程序中时,它被窃听了。我添加了一个KeyListener,用于在键入文本时捕获文本,但该文本也有乱码。我仍在进一步调试。扫描仪为Datalogic QW2100。可能有帮助你解决了吗?“我想”请告诉我真相谢谢,托德,我已经更正了描述。无论如何,在ALT+NumPad模式下,如果没有这种破解,条形码扫描是不可能的,我已经搜索解决方案3年了!这个错误给我造成了很多收入损失。我不明白为什么Java中还没有解决如此严重和基本的问题。因为如果需要任意扩展的ascii数据,则需要直接从串行端口读取