ALT + NumPad 메서드를 사용하여 바코드 스캐너에서 오는 KeyEvent에 문제가 있습니다. Java는 ALT 키를 누르면 임의 출력으로 KeyTyped 이벤트를 생성합니다. 현재 Java 7 및 Java 8 JRE의 최신 버전에 문제가 있습니다 (Windows 8, Windows 7 및 Ubuntu 14에서 JRE 7u67 및 JRE 8u20로 테스트했습니다).
내 솔루션은의 KeyEventDispatcher를 등록하는 것입니다 차단 한 KeyEvents를 ALT 방법이 활성화 :
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;
}
}
대부분의 바코드 스캐너가 키보드를 시뮬레이션 - 지금까지 자바에 관한 한, 그것은 단지처럼 행동한다 타이핑 텍스트. 그러나 스캐너는 일반적으로 텍스트를 엉망으로 만드는 추가 제어 문자가 포함될 수있는 다른 모드로 구성 할 수도 있습니다. 스캐너가 텍스트 문서를 제대로 스캔합니까? 스캐너에 중요한 구성 옵션이 있습니까? 정확한 모델은 스캐너입니까? –
또한, 디버깅을 위해 모든 'keyTyped' 문자를 인쇄하는 필드에 키 리스너를 추가하십시오 (키를 눌렀다 놓은 키 코드도 가능). 당신은 아마도 문제가되는 키스트 로크 (들)을 식별하고 아무것도하지 않는 행동으로 매핑하여 텍스트로 출력하지 않을 수 있습니다. –
감사합니다. 스윙 텍스트 필드가 아닌 경우, 예. 그러나, 이것을 메인 프로그램에 통합했을 때, 그것은 도청되었습니다. KeyListener를 추가하여 타이핑 된 텍스트를 캡처하지만이 텍스트도 잘립니다. 나는 아직도 이것을 디버깅 중이다. 스캐너는 Datalogic QW2100입니다. – user3524961