【问题标题】:Issue scanning barcode in java swingjava swing中的问题扫描条码
【发布时间】:2015-11-15 05:23:51
【问题描述】:
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 *   Listens for bar code input and puts it into a String Buffer.
 *
 */
public class BarcodeReader {

    private static final long THRESHOLD = 120;
    private static final int MIN_BARCODE_LENGTH = 8;

    public interface BarcodeListener 
    {
        void onBarcodeRead(String barcode);
    }

    private final StringBuffer barcode = new StringBuffer();
    private static final List<BarcodeListener> listeners = new CopyOnWriteArrayList<BarcodeListener>();
    private long lastEventTimeStamp = 0L;

    public BarcodeReader() {

        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
            @Override
            public boolean dispatchKeyEvent(KeyEvent e) 
            {
                try 
                {
                    if (e.getID() != KeyEvent.KEY_RELEASED) {
                        return false;
                    }

                    if (e.getWhen() - lastEventTimeStamp > THRESHOLD) {
                        barcode.delete(0, barcode.length());
                    }

                    lastEventTimeStamp = e.getWhen();

                     if (e.getKeyCode() == KeyEvent.VK_ENTER) 
                     {
                         if (barcode.length() >= MIN_BARCODE_LENGTH) 
                             fireBarcode(barcode.toString());

                         barcode.delete(0, barcode.length());
                     } 
                     else 
                         barcode.append(e.getKeyChar());

                    return false;
                } 
                catch (UnsupportedOperationException err) 
                {
                    throw new UnsupportedOperationException(err); //To change body of generated methods, choose Tools | Templates.
                }

            }
        });

    }

    protected void fireBarcode(String barcode) {
        for (BarcodeListener listener : listeners)
        {
            listener.onBarcodeRead(barcode);
        }
    }

    public void addBarcodeListener(BarcodeListener listener) {
        listeners.add(listener);
    }

    public void removeBarcodeListener(BarcodeListener listener) {
        listeners.remove(listener);
    }
}

实现代码如下:

private void startReading() 
    {
       BarcodeReader reader = new BarcodeReader();

       reader.addBarcodeListener(new BarcodeListener() {

            public void onBarcodeRead(String barcode) {
                System.out.println(barcode);
            }
        });
    }

现在这个代码的问题是,当我扫描条形码时,它会返回多行相同的数据。因此我无法弄清楚发生了什么。迫切需要帮助。 提前感谢

【问题讨论】:

    标签: java swing barcode


    【解决方案1】:

    您应该解释哪个库读取条形码,或者它是图像、pdf 等...等等... 根据我的经验,阅读条形码并不太简单,但我最古老的实现之一是分析 jpeg 图像。 你必须想象用一条穿过所有黑色条码线的线来切割条码。代码由交叉点之间的距离标识。因此,如果您在同一个条形码上传递多行,您将得到多个(和相同的)结果。 许多库都做这样的工作,因此为了防止出现多行,您必须识别条形码中的一种模式,让您了解您已经找到了代码。原谅我糟糕的英语!

    【讨论】:

    • 感谢@Homo Filmens 的回答,但我正在尝试使用键盘挂钩来实现。
    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    相关资源
    最近更新 更多