Barcode Scanner einlesen

MPC4ever

Mitglied
Hallo zusammen.
Gibt es eine Möglichkeit zu unterscheiden ob der Zahlenwert in dem JTextField von Barcodescanner kommt oder per Hand an der Tastatur eingegeben wurde.

Gruß, MPC4ever
 

Andi_CH

Top Contributor
Ich hab genau dasselbe Problem - der Barcodescanner ist eine ganz gewöhnliche Tastatur.

Wie kann ich überhaupt Tastaturevents auswerten? (Nein, ich habe kein GUI - ich will auch gar keines haben, denn das ganze wird als Hintergrundprozess laufen und wo der Focus ist, ist aus Sicht des Programmes nicht definiert)

ach so nebenbei - der Barcodescanner liefert je nach Code auch Buchstaben ;-) also nicht nur 0-9
 

inv_zim

Gesperrter Benutzer
Vielleicht lässt sich der Unterschied über die Geschwindigkeit mit der eingegeben wird ausmachen? Von Hand wird niemand so schnell tippen wie ein Barcodescanner.
 

Andi_CH

Top Contributor
Na na - wir basteln doch nicht. Schon mal die die Keyrepetionsrate gedacht?
Und daran, dass gleichzeitig jemand tippt und eine andere Person den Scanner betätigt?

Vorerst möchte ich überhaupt an die Werte kommen, auch wenn eine Applikation mit GUI im Vordergrund läuft, die eigentlich alle Tastaturevents schluckt.
Im Weiteren sollen diese Events vom Hintergrundprozess geschluckt werden, also gar nie bis zum laufenden Office oder was auch immer kommen.
 

andy82

Mitglied
Na na - wir basteln doch nicht. Schon mal die die Keyrepetionsrate gedacht?
Und daran, dass gleichzeitig jemand tippt und eine andere Person den Scanner betätigt?

Vorerst möchte ich überhaupt an die Werte kommen, auch wenn eine Applikation mit GUI im Vordergrund läuft, die eigentlich alle Tastaturevents schluckt.
Im Weiteren sollen diese Events vom Hintergrundprozess geschluckt werden, also gar nie bis zum laufenden Office oder was auch immer kommen.

Eine saubere Programmierung ist immer über Model, wenn es um die Daten geht. Das ist der Unterschied zwischen Swing und AWT. Jede Component in Swing gibt es immer eine entsprechende Model, in diesem Fall zu JTextField ist die PlainDocument. Das nennt man Programmierung nach MVC-Prinzip, also Trennung zwischen Daten(Daten-Steuerung) und Darstellung(View) der Daten
:rtfm:
Ein weitere Vorteil der Benutzung der PlainDocument. Nur bei Document lässt sich die Eingabe vorher kontrollieren, gegebenfalls manipullieren oder schwinden lassen, bevor überhaupt zum Erscheinen lassen oder nicht.
 

Andi_CH

Top Contributor
Eine saubere Programmierung ist immer über Model, wenn es um die Daten geht. Das ist der Unterschied zwischen Swing und AWT. Jede Component in Swing gibt es immer eine entsprechende Model, in diesem Fall zu JTextField ist die PlainDocument. Das nennt man Programmierung nach MVC-Prinzip, also Trennung zwischen Daten(Daten-Steuerung) und Darstellung(View) der Daten
:rtfm:
Ein weitere Vorteil der Benutzung der PlainDocument. Nur bei Document lässt sich die Eingabe vorher kontrollieren, gegebenfalls manipullieren oder schwinden lassen, bevor überhaupt zum Erscheinen lassen oder nicht.

Eine nicht provokative Frage (ehrlich!) Ist deutsch nicht deine Muttersprache?
Ich verstehe nicht einmal die sprachliche Ebene und auch der Zusammenhang mit dem eigentlichen Problem fehlt total!

Also da steht ein PC und daran ist ein Scanner angeschlossen - Kollege 1 ist gerade daran ein Mail zu tippen wärend Kollege 2 etwas scannt.
Was nützt dem Kollegen 1 der Barcode in seinem Mail?

-> zu exotisch? nur ein Benutzer pro PC? ok ->

Der Mitarbeiter hat soeben eingetragen, dass er mit Arbeiten begonnen hat (ja, Arbeitszeiterfassung per PC ist hier üblich und das ist eine eigenständige Applikation)
Einige Zeit später beginnt er damit zu scannen -> wo landet denn das Resultat des Scans, wenn dummerweise vergessen wurde die Applikation in den Vordergrund zu klicken?

Es ist einfach ein bescheuertes System einen Scanner als Tastatur zu konfigurieren, aber es ist nun mal so.

Also gesucht ist immer noch eine Lösung (es muss definitiv nicht alles in Java sein) womit alle Tastaturereignisse abgefangen werden, nach Quelle gefiltert werden und alles was nicht vom Scanner ist, weitergereicht wird.
 

Landei

Top Contributor
Üblicherweise lässt sich ein Scanner so konfigurieren, dass man einen Präfix angeben kann. Wenn du dafür irgend etwas selten benutztes einstellst (wie ° oder §), kannst du das zumindest innerhalb eines Programms abfangen.
 

andy82

Mitglied
Eine nicht provokative Frage (ehrlich!) Ist deutsch nicht deine Muttersprache?
Ich verstehe nicht einmal die sprachliche Ebene und auch der Zusammenhang mit dem eigentlichen Problem fehlt total!
...

Natürlich Deutsch ist nicht meine Muttersprache, aber vor der Wissenschaft sind alle Sprache gleich. Es scheint, dass Du das Prinzip der Model-View-Control Programmierung nicht kennt, und auch nicht wie man PlainDocument statt JTextField benutzt. Über dieses Thema braucht man wohl ein langes Kapitel. Also verschenke ich es.
 

Andi_CH

Top Contributor
Vor dem menschlichen Gehirn sind nicht alle Sprachen gleich und was die abstrakte Wissenschaft damit anstellt weiss ich nicht - egal, es ging mir nur darum abzutasten wie ich den unzusammenhängenden Satz interpretieren soll.

MVC: Ich kenne das verdammt genau, aber es bringt in diesem fall nichts und hat abgesehen davon auch nichts damit zu tun, denn ....

Das Betriebssystem (egal ob Windows oder Linux) leitet alle Keyboardevents an die Applikation weiter, die den Fokus hat.

Wenn nun dein MVC oder was auch immer für ein Programm den Fokus nicht hat oder nicht mal ein GUI hat, weil es das, wie in meinem Fall, gar nicht braucht, wird es NIEMALS ein Event vom Keyboard erhalten.
(@Landei - das ist mein eigentliches Problem - die Events landen nie in meiner Hintergrundapplikation. Ausserdem habe ich nicht einmal ein Doku für den Handscanner, aber das ist ein anderes Problem ;-))

Also eine Kurzbeschreibung:

- Der Mitarbeiter betätigt die Scannerpistole.
- Es wird von der Webcam ein Bild aufgenommen und im Filesystem abgelegt.
(Es ist noch detailliert beschrieben dass die gescannte Nummer, Zeit und Datum im Dateinamen des Bildes vorkommen, aber das ist hier irrelevant und abgesehen davon auch banal zu reaisieren.)
- Zur Verfügung steht der PC XY. (Das ist der auf dem auch die Zeiterfassung und andere Appliaktionen zur Verfügung stehen)

Für so eine Mikroapplikation braucht man ganz sicher weder Swing noch AWT noch Document noch sonst was.

Also wenn Du es schaffst in Java eine Applikation zu schreiben die den Scanneroutput erhält obwohl z.B. ein Mail- oder Officeprogramm offen ist, hast du dir eine Prämie verdient.

Nebenbei - hat hier jemand genügend C++ Kenntnisse? Kann man das damit machen? Wenn ja, bitte PN.
 

mmz

Aktives Mitglied
Hi,

läuft das ganze unter Windows? Mit einem globalen KeyHook (z.b. von Java Global Keyboard/Mouse Hook – JNI • Blog Archive • Jotschi’s Blog, Java lib und dll für Windows per JNI eingebunden) bekommst Du zumindest alle Keyboard Eingaben in deinem Programm mit. ( für Linux hab ich ehrlich gesagt nicht gesucht )
Wenn sich der Treiber für den Scanner tatsächlich wie ein reales Keyboard verhält und wir den Input mit gegebenenfalls Prefix oder per RegEx (sollte die Eingabe einem bestimmten Muster entsprechen) auswerten können, könnte man da zumindest ansetzten. Evtl. die Eingabe mit einem Delay weitergeben wenn wir festgestellt haben, dass sie nicht vom Scanner kommt. Das mit der Verzögerung ist vllt. nicht elegant, aber wenn der Scanner so schnell tippt wie angenommen, dann sollte das nicht auffallen bis die Auswertung fertig ist.
 

Flashbanger

Mitglied
Unter Linux hab ich mal etwas ähnliches geschafft.

Ich hatte eine zweite Tastatur angeschlossen und wollte die Eingaben an dieser Tastatur gesondert behandeln.
Unter Linux öffnete ich dafür die Gerätedatei als Stream und konnte daraufhin den Tastatur-Scancode abhören.

Diesen müsste man dann noch in die entsprechende Zeichenkette umwandeln.

Wie das unter Windows geht weis ich allerdings nicht. Vermutlich wirst Du nicht darüber hinweg kommen einen eigenen Treiber zu schreiben, der den Scanner nichtmehr Windows als Keyboard sondern nurnoch deiner Applikation zur Verfügung stellt.

Liebe Grüße

Flashbanger

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication3;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;

/**
 *
 * @author jalmar
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException, IOException {
        // TODO code application logic here
        File j = new File("/dev/input/event4");		//ANPASSEN!
        System.out.println(j.exists()); 
        System.out.println(j.canRead());
        Scanner r = null;
        try {
            r = new Scanner(j);
            while(r.hasNext()) {
                System.out.println(r.next());
                }

            }
        finally {
            r.close();
            }
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S barcode an mp3 koppeln AWT, Swing, JavaFX & SWT 9
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
N Dateien einlesen und in GUI immernoch auswählbar AWT, Swing, JavaFX & SWT 1
L Wörter zwischen zwei Grenzen einlesen. AWT, Swing, JavaFX & SWT 13
L Csv-Datei einlesen AWT, Swing, JavaFX & SWT 34
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
M PDF einlesen und innerhalb Pane anzeigen AWT, Swing, JavaFX & SWT 5
J vom Dialogfenster ein Feld des Hauptfenster einlesen AWT, Swing, JavaFX & SWT 2
agent47 JavaFX TreeView Struktur dynamisch einlesen AWT, Swing, JavaFX & SWT 1
G .txt-Datei einlesen /formatieren in JTextfield ?? AWT, Swing, JavaFX & SWT 8
B ST Datei einlesen AWT, Swing, JavaFX & SWT 1
ZoXlike Wie kann man ArrayList in JTabel einlesen? [WindowBuilder] AWT, Swing, JavaFX & SWT 1
F In Action Listener TextFields einlesen und prüfen. Abbruch bei falschen Eingaben. Wie mache ich das? AWT, Swing, JavaFX & SWT 2
R einzelne Zeichen in jTable einlesen AWT, Swing, JavaFX & SWT 10
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
T Dateipfad mit GUI einlesen AWT, Swing, JavaFX & SWT 3
B AWT Mit TextField Zahlen einlesen lassen AWT, Swing, JavaFX & SWT 34
A Swing von Textdatei einlesen und per JLabel anzeigen AWT, Swing, JavaFX & SWT 2
B Problem mit Passwort einlesen und vergleichen AWT, Swing, JavaFX & SWT 2
H * Einlesen von Text-Dateien & Zeichensatz bestimmen AWT, Swing, JavaFX & SWT 2
R Swing XML Datei in JTree, Problem mit Daten einlesen AWT, Swing, JavaFX & SWT 34
C Image einlesen AWT, Swing, JavaFX & SWT 5
G LookAndFeel Dynamisches Einlesen von LookAndFeels - NullPointerException AWT, Swing, JavaFX & SWT 4
D Pixel in ein Array einlesen AWT, Swing, JavaFX & SWT 2
N Swing Problem beim Einlesen von Jtable in Array AWT, Swing, JavaFX & SWT 5
K Per ComboBox Dateien einlesen AWT, Swing, JavaFX & SWT 23
W HTML-Text mit relativer URL in JEditorPane einlesen AWT, Swing, JavaFX & SWT 10
S Tutorial zum Excel Tabelle in JTable einlesen? AWT, Swing, JavaFX & SWT 4
P Fehler beim Einlesen eines JTextFields AWT, Swing, JavaFX & SWT 2
J Dateien einlesen AWT, Swing, JavaFX & SWT 3
J Einlesen aus Datei AWT, Swing, JavaFX & SWT 2
B JTable Wert in Vector einlesen AWT, Swing, JavaFX & SWT 4
K double / int einlesen? AWT, Swing, JavaFX & SWT 12
R Bild einlesen und manipulieren AWT, Swing, JavaFX & SWT 3
T JTextArea einlesen mit AWT, Swing, JavaFX & SWT 6
G JCombobox -> daten einlesen AWT, Swing, JavaFX & SWT 4
F Einlesen von text in textArea mittels for-schleife AWT, Swing, JavaFX & SWT 3
P Bild im TIFF oder BMP Format einlesen AWT, Swing, JavaFX & SWT 3
M Einlesen in JTable AWT, Swing, JavaFX & SWT 5
N Tastatur Zeichen einlesen ohne sichtbares Fenster AWT, Swing, JavaFX & SWT 8
A Datei einlesen und Inhalt in JList (Tabbed Pane) anzeigen? AWT, Swing, JavaFX & SWT 11
J DefaultTableModel einlesen aus *txt AWT, Swing, JavaFX & SWT 2
S Bild einlesen AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen


Oben