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) 个答案