2014-04-11 1 views
7

바코드를 자바 텍스트 필드로 읽으려는 목적으로 Datalogic에서 바코드 스캐너를 설치했습니다. 그러나 스윙에서 바코드를 스캔하면 결과 텍스트가 가비지가됩니다. 나는 이것을 사용할 수 없다. 독립 실행 형 java.awt.TextField는 잘 작동하지만이 코드를 내 코드에 통합하면 가비지 매핑 할 수없는 문자도 생성됩니다.스윙의 바코드 스캐너에서 읽기

Java 용 특정 드라이버가 필요한지 모르겠다. 문자열을 UTF-8에서 ISO-88 ...로 변환하려고 시도했지만 아무 소용이 없습니다.

2 일 동안봤을 때부터 보았습니다.

도움이 될 것입니다.

감사

-innocent

+4

대부분의 바코드 스캐너가 키보드를 시뮬레이션 - 지금까지 자바에 관한 한, 그것은 단지처럼 행동한다 타이핑 텍스트. 그러나 스캐너는 일반적으로 텍스트를 엉망으로 만드는 추가 제어 문자가 포함될 수있는 다른 모드로 구성 할 수도 있습니다. 스캐너가 텍스트 문서를 제대로 스캔합니까? 스캐너에 중요한 구성 옵션이 있습니까? 정확한 모델은 스캐너입니까? –

+1

또한, 디버깅을 위해 모든 'keyTyped' 문자를 인쇄하는 필드에 키 리스너를 추가하십시오 (키를 눌렀다 놓은 키 코드도 가능). 당신은 아마도 문제가되는 키스트 로크 (들)을 식별하고 아무것도하지 않는 행동으로 매핑하여 텍스트로 출력하지 않을 수 있습니다. –

+2

감사합니다. 스윙 텍스트 필드가 아닌 경우, 예. 그러나, 이것을 메인 프로그램에 통합했을 때, 그것은 도청되었습니다. KeyListener를 추가하여 타이핑 된 텍스트를 캡처하지만이 텍스트도 잘립니다. 나는 아직도 이것을 디버깅 중이다. 스캐너는 Datalogic QW2100입니다. – user3524961

답변

1

모든 spurios 문자를 제거하기 위해 스캐너를 재설정 해보십시오/설정되었을 수 있습니다 코드; 즉, 스캐너가

이 바코드를 스캔 http://www.datalogic.com/eng/quickscan-i-lite-qw2100-pd-163.html에서 제품 참조 설명서를 다운로드 스윙

에 대한 몇 가지 문제가 발생할 수 있습니다 이스케이프 시퀀스로 GS1-128 코드를 기본적으로 바코드 ID를 보내드립니다 참조 가이드에 따라 모드에게 관련 섹션에

이동을 프로그래밍 입력하고 모든 프리앰블을 제거하기 위해 코드를 스캔하고 모든 코드

당신은 또한 키보드 에뮬레이션 및 코드 페이지의 다른 유형을 시도 할 수 있습니다에 대한 목표 라벨을 제거합니다.

+0

대단히 감사합니다. – user3524961

0

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; 
    } 
} 
+0

"제 생각에"사실을 말하십시오 – tod

+0

고마워요, 토드, 설명을 수정했습니다. 어쨌든,이 해킹없이 Alt + NumPad 모드에서는 바코드 스캐닝이 불가능합니다. 3 년 동안 솔루션을 검색했습니다. 이 버그로 인해 수입이 많이 줄어 들었습니다. 나는 자바에서 아직 해결되지 않은 매우 심각하고 기본적인 문제가 어떻게 될 수 있는지 이해할 수 없다. – JHead

+0

임의의 확장 된 ASCII 데이터가 필요하면 직렬 포트에서 직접 읽어야하기 때문에 –