2014-04-11 18 views
7

Ho installato uno scanner di codici a barre da Datalogic, con l'obiettivo di leggere il codice a barre in un campo di testo java. Tuttavia, quando eseguo la scansione del codice a barre in Swing, il testo risultante è inutile. Non posso usare questo. Su standalone java.awt.TextField funziona bene, ma quando lo integro nel mio codice, produce anche caratteri non mappabili.Lettura da uno scanner di codici a barre su Swing

Non so se ho bisogno di un driver specifico per JAVA, Ho provato a convertire la stringa da UTF-8 a ISO-88 ... inutilmente.

State guardando questo da 2 giorni invano.

Qualsiasi aiuto sarà molto apprezzato.

Grazie

-innocent

+4

La maggior parte dei lettori barcode simulare una tastiera - per quanto riguarda Java è interessato, dovrebbe agire come testo di battitura. Ma gli scanner sono in genere anche configurabili in diverse modalità, che possono comportare ulteriori caratteri di controllo che potrebbero rovinare il testo. Lo scanner funziona correttamente con la scansione in un documento di testo? Lo scanner ha opzioni di configurazione che potrebbero avere importanza? Quale modello esatto è lo scanner? –

+1

Inoltre, per il debug, prova ad aggiungere un listener di chiavi sul campo che stampi solo tutti i caratteri 'keyTyped' (e forse anche il tasto premi e rilascia i keycode). Probabilmente è possibile identificare le sequenze di tasti incriminate e associarle a un'azione nulla da fare in modo che non vengano visualizzate come testo. –

+2

Grazie in un campo di testo non swing, sì. Tuttavia, quando ho integrato questo nel mio programma principale, mi ha infastidito. Ho aggiunto un KeyListener, per catturare il testo mentre viene digitato, ma anche questo testo è confuso. Sto ancora eseguendo il debug di questo ulteriore. Lo scanner è Datalogic QW2100. – user3524961

risposta

1

provare a ripristinare lo scanner per rimuovere tutti i caratteri spurios/codici che potrebbero essere stati creati; cioè secondo la guida di riferimento scanner invierà per default l'ID di codice a barre GS1-128 codici come una sequenza di escape, che potrebbe causare qualche problema di oscillazione

scaricare la guida di riferimento prodotto http://www.datalogic.com/eng/quickscan-i-lite-qw2100-pd-163.html

scansione del codice a barre per entrare in modalità di programmazione

Vai alla sezione pertinente e la scansione dei codici a rimuovere tutti i preamboli e di togliere l'etichetta obiettivo per tutti i codici

si può anche provare i diversi tipi di emulazione di tastiera e tabella codici.

+0

Grazie mille. – user3524961

0

C'è un problema con KeyEvents proveniente da uno scanner di codici a barre usando il metodo ALT + NumPad. Java genera eventi KeyTyped con output casuali quando viene premuto il tasto ALT. Il problema esiste nelle versioni correnti di Java 7 e Java 8 JRE (l'ho testato con JRE 7u67 e JRE 8u20 su Windows 8, Windows 7 e Ubuntu 14).

La mia soluzione è quello di registrare un KeyEventDispatcher che blocca le KeyEvents quando il metodo di Alt è attivo:

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

"penso" per favore fornisci i dati – tod

+0

Grazie, per favore, ho corretto la descrizione. In ogni caso, la scansione dei codici a barre è impossibile in modalità ALT + NumPad senza questo trucco, ho cercato la soluzione per 3 anni! Questo bug ha causato molte perdite di guadagno per me. Non riesco a capire come può essere che un problema così serio e di base non sia ancora risolto in Java. – JHead

+0

perché se hai bisogno di dati ascii estesi arbitrari devi leggere direttamente dalla porta seriale –