有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java随机字符生成,而不是GS字符,在扫描GS1数据矩阵条形码时以小延迟摆动

我创建了一个带有输入文本的简单swing应用程序,用于读取条形码并在输出文本中打印GS字符位置

例:

输入:01070462616434291722010010Y0238921MA3W7J59UC2W111(从条形码扫描仪获取)

输出:GS1接通位置=32

正常的swing应用程序工作正常,但当为关键事件处理器创建一个小延迟时(为每个关键事件添加Thread.sleep(2)),有时该输出不存在,因为正在生成其他字符而不是GS字符。 (添加延迟的原因是,在生产代码中,synthetica用于在swing应用程序中添加外观和感觉,因此,关键事件似乎有一些延迟。因此,在这个简单的应用程序中,强制添加延迟只是为了模拟问题。)

虽然有时GS不会出现,但每次GS角色的字符序列都非常相同

GS字符序列->;ALT+0+0+2+9

此处为GS字符的打印按键和释放按键序列(这只是为了验证按键和释放按键时的字符序列,不包括在最新代码中)

^{tb1}$

这是一个正确的场景,GS字符的类型与最后一行中的预期相同(键char 29是GS字符),但在错误的场景中,所有其他键事件相同,但键类型的字符不同

这是源代码

斯温加普

import java.awt.*;

public class SwingApp {

    public static void main(String[] args) {
        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventPostProcessor(keyEvent -> {
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return false;
        });
        EventQueue.invokeLater(() -> new ScannerWindow().show());
    }
}

扫描窗

import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class ScannerWindow {

    private int i;
    private final JFrame f;

    public ScannerWindow(){
        f = new JFrame();
        f.setLayout( null);

        JTextArea ta = new JTextArea();

        JTextField txt=new JTextField();
        txt.setBounds(130,20,300, 40);
        txt.addKeyListener(new KeyAdapter() {
            @Override
            public void keyTyped(KeyEvent e) {

                if(e.getKeyChar() == 29){
                    ta.append("\n GS1 on position = " + i);
                }
                i++;
            }
        });
        f.add(txt);

        JButton b = new JButton("Clear");
        b.addActionListener(e -> {
            ta.setText("");
            txt.setText("");
            i = 0;
        });
        b.setBounds(130,80,100, 40);
        f.add(b);

        ta.setBounds(50, 130, 400, 300);
        f.add(ta);

        f.setSize(600,500);
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    }

    public void show()
    {
        f.setVisible(true);
    }
}

有人能帮我吗


共 (0) 个答案