2014-04-11 13 views
7

Ich habe einen Barcode-Scanner von Datalogic installiert, mit dem Ziel, den Barcode in ein Java-Textfeld zu lesen. Wenn ich jedoch den Barcode in Swing scanne, ist der resultierende Text Müll. Ich kann das nicht benutzen. Auf Standalone funktioniert java.awt.TextField zwar gut, aber wenn ich das in meinen Code integriere, erzeugt es auch nicht abbildbare Zeichen.Lesen von einem Barcode-Scanner in Swing

Ich weiß nicht, ob ich einen speziellen Treiber für JAVA benötigen, Ich habe versucht, die Zeichenfolge von UTF-8 nach ISO-88 zu konvertieren ... ohne Erfolg.

Schon seit 2 Tagen in-eitel.

Jede Hilfe wird sehr geschätzt.

Dank

-innocent

+4

meisten Barcode-Scanner simulieren eine Tastatur - so weit wie Java betrifft, so sollte es wirken wie Text eingeben. Scanner sind jedoch typischerweise auch in verschiedene Modi konfigurierbar, was zusätzliche Steuerzeichen beinhalten kann, die den Text durcheinander bringen könnten. Funktioniert Ihr Scanner ordnungsgemäß in einem Textdokument? Hat der Scanner irgendwelche Konfigurationsoptionen, die von Bedeutung sein könnten? Welches genaue Modell ist der Scanner? –

+1

Versuchen Sie auch, für das Debugging einen Schlüssel-Listener in das Feld einzufügen, der nur alle 'keyTyped'-Zeichen ausgibt (und vielleicht auch die Tasten drücken und freigeben). Sie können den/die problematischen Tastenanschlag (e) wahrscheinlich identifizieren und sie einer Aktion "Nichts tun" zuordnen, sodass sie nicht als Text ausgegeben werden. –

+2

Danke In ein nicht swing Textfeld, ja. Als ich dies jedoch in mein Hauptprogramm integrierte, wurde es abgehört. Ich habe einen KeyListener hinzugefügt, um den Text zu erfassen, während er eingegeben wird, aber dieser Text ist auch verstümmelt. Ich debugge noch weiter. Der Scanner ist Datalogic QW2100. – user3524961

Antwort

1

versuchen, den Scanner Zurücksetzen aller spurios Zeichen/Codes zu entfernen, die eingerichtet wurden könnten; dh nach dem Referenzhandbuch der Scanner standardmäßig den Barcode-ID für GS1-128 Codes als Escape-Sequenz senden, die einige Probleme für Swing verursachen könnten

das Produkt Nachschlagewerk Download von http://www.datalogic.com/eng/quickscan-i-lite-qw2100-pd-163.html

den Barcode scannen Programmiermodus

gehen auf den betreffenden Abschnitt zu betreten und die Codes scannen, um alle Präambeln zu entfernen und das Ziel-Label für alle Codes

Sie die verschiedenen Arten von Tastaturemulation und Codepage versuchen können auch zu entfernen.

+0

Vielen Dank. – user3524961

0

Es gibt ein Problem mit KeyEvents, die von einem Barcode-Scanner stammen, der die Methode ALT + NumPad verwendet. Java generiert KeyTyped-Ereignisse mit zufälligen Ausgaben, wenn die ALT-Taste gedrückt wird. Das Problem existiert in den aktuellen Versionen von Java 7 und Java 8 JRE (ich habe es mit JRE 7u67 und JRE 8u20 unter Windows 8, Windows 7 und Ubuntu 14 getestet).

Meine Lösung ist ein KeyEventDispatcher zu registrieren, dass Blöcke, die KeyEvents, wenn die ALT-Methode ist aktiv:

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

"Ich denke" bitte geben Sie Fakten – tod

+0

Danke, tod, ich habe die Beschreibung korrigiert. Wie auch immer, Barcodescannen ist im ALT + NumPad-Modus ohne diesen Hack unmöglich, ich suche die Lösung seit 3 ​​Jahren! Dieser Fehler hat mir viel Einkommen gekostet. Ich kann nicht verstehen, wie das ein so ernstes und grundlegendes Problem in Java noch nicht gelöst werden kann. – JHead

+0

, wenn Sie beliebige erweiterte ASCII-Daten benötigen, müssen Sie direkt von der seriellen Schnittstelle lesen –

Verwandte Themen