2014-04-11 11 views
7

Zainstalowałem skaner z kodem paskowym z Datalogic, mając na celu odczytanie kodu kreskowego do pola tekstowego Java. Jednak po zeskanowaniu kodu kreskowego w Swing wynikowy tekst jest śmieciowy. Nie mogę tego użyć. Na wolnostojącym java.awt.TextField działa dobrze, ale kiedy integruję to z moim kodem, produkuje on również niemapowane znaki.Czytanie ze skanera kodów kreskowych w Swingu

Nie wiem, czy będę potrzebować konkretnego sterownika dla JAVA, Próbowałem konwertować ciąg od UTF-8 do ISO-88 ... bezskutecznie.

Patrzyłem na to od 2 dni na próżno.

Każda pomoc zostanie bardzo doceniona.

Dzięki

-innocent

+4

Większość skanerów kodów kreskowych symulacji klawiatury - tak daleko, jak Java, to powinna ona działać podobnie jak wpisywanie tekstu. Jednak skanery są zwykle konfigurowalne w różnych trybach, co może obejmować dodatkowe znaki kontrolne, które mogą zepsuć tekst. Czy twój skaner prawidłowo skanuje dokument tekstowy? Czy skaner ma jakieś opcje konfiguracyjne, które mogą mieć znaczenie? Jakim dokładnym modelem jest skaner? –

+1

Ponadto, do debugowania, spróbuj dodać kluczowego detektora na polu, które po prostu wypisuje wszystkie znaki 'keyTyped' (i może również klawiszowe naciśnięcie i zwolnienie klawiszy). Prawdopodobnie możesz zidentyfikować naruszające cię klawisze i zamapować je na akcję "nic nie robić", aby nie wyświetlały się jako tekst. –

+2

Dzięki za niezmagające pole tekstowe, tak. Jednak po zintegrowaniu tego z moim głównym programem, był on podsłuchiwany. Dodałem KeyListener, aby przechwycić tekst w trakcie pisania, ale ten tekst jest również zniekształcony. Nadal debuguję to dalej. Skanerem jest Datalogic QW2100. – user3524961

Odpowiedz

1

spróbuj zresetować skaner, aby usunąć wszystkie spurios znaki/kody, które mogły zostać utworzone; czyli według poradnik skaner wyśle ​​domyślnie identyfikator z kodem kreskowym dla kodów GS1-128 jako sekwencji ucieczki, co może powodować pewne problemy na huśtawce

pobrać przewodnik produkt z http://www.datalogic.com/eng/quickscan-i-lite-qw2100-pd-163.html

zeskanować kod kreskowy aby wejść w tryb programowania

przejść do odpowiedniej sekcji i skanowania kodów, aby usunąć wszystkie preambuły i usunąć etykietę Celem dla wszystkich kodów

można również wypróbować różne rodzaje emulacji klawiatury i strony kodowej.

+0

Dziękuję bardzo. – user3524961

0

Występuje problem z KeyEvents pochodzących ze skanera kodów kreskowych przy użyciu metody ALT + NumPad. Java generuje zdarzenia KeyTyped z losowymi wyjściami po naciśnięciu klawisza ALT. Problem występuje w obecnych wersjach Java 7 i Java 8 JRE (testowałem je z JRE 7u67 i JRE 8u20 na Windows 8, Windows 7 i Ubuntu 14).

Moje rozwiązanie jest zarejestrowanie KeyEventDispatcher że blokuje KeyEvents gdy metoda Alt jest aktywny:

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

"Myślę" proszę podać fakty – tod

+0

Dzięki, tod, poprawiłem opis. W każdym razie, skanowanie kodów kreskowych jest niemożliwe w trybie ALT + NumPad bez tego hacka, szukam rozwiązania przez 3 lata! Ten błąd spowodował dla mnie dużo utraty dochodów. Nie mogę zrozumieć, jak to możliwe, że tak poważny i podstawowy problem wciąż nie został rozwiązany w Javie. – JHead

+0

ponieważ jeśli potrzebujesz arbitralnych rozszerzonych danych ASCII, musisz odczytywać bezpośrednio z portu szeregowego –

Powiązane problemy