ich versuche gerade einen Barcode Scanner über usb einzulesen aber komme nicht so richtig weiter.
usb4java-javax-1.3.0.jar
Java:
javax.usb.UsbException:TheUsbServices implementation class usb4java.javax.Services was not found : usb4java.javax.Services
at javax.usb.UsbHostManager.createUsbServices(UnknownSource)
at javax.usb.UsbHostManager.getUsbServices(UnknownSource)
was ich bisher gelesen habe muss ich sowas wie ein Property file erzeugen.
DateiName "javax.usb.properties"
Code:
javax.usb.services = org.usb4java.javax
das habe ich gemacht, aber wenn dann das Programm starten will bekomme ich das als Fehler:
Invalid ZIP archive: src/javax.usb.properties [inScannerInterface]
Warum willst du denn den Scanner direkt ansprechen? Normalerweise haben die Teile einen Treiber, der einen einfacheren Zugriff ermöglicht (z.B. als Tastatur)
Im besten Fall gar nicht, d.h. der Scanner ist so eingestellt, dass er wie eine Tastatur funktioniert. Scannst Du einen Barcode wird der Text (die Nummer) wie von einer Tastatur "getippt". In der Regel kann man noch einstellen, dass beispielsweise nach der Nummer noch ein Return "gedrückt" wird.
Normalerweise schon. Da müsstest du mal schauen, welche Optionen der Treiber bietet. Die Alternative ist ein serielles Protokoll, ich kenne das so, dass ein virtueller ComPort zur Verfügung gestellt wird.
Es gibt auch die Moeglichkeit jeden Tastendruck in deiner Applikation zu fangen, diese zusammenzufassen und dann zu schauen wie lange es gebraucht hat um diese einzugeben. Relatischerweise schafft es kein Benutzer 13 Stellen in weniger als einer Sekunde einzugeben.
Sowas hatte ich mal gebaut um zwischen einem Scanner und dem Benutzer unterscheiden zu koennen.
Oh, wie hieß das Zeug? Könnte jSerialComm gewesen sein. Ich hatte seinerzeit einen Scanner an ein Kassensystem angebunden. Du musst natürlich das Protokoll des Scanners kennen.
War etwas verschwenderisch weil jedes Mal neuer Thread faellt mir gerade auf (und wieso das in C# ist weisz ich auch nicht, damals hatten wir alles in VB.NET...naja, man wird alt und vergesslich).
Wuerde ich heute anders bauen.
* Einen konstanten Thread im Hintergrund halten welcher nie beendet wird.
* Statt DateTime irgendwas leichteres verwenden, sowas wie System.nanoTime().
* Explizit auf String bauen anstelle von generisch, und damit einen StringBuilder intern fuer den Buffer halten.
das sieht sehr Gut aus Danke! Das Problem ist aber nach wievor die Geschichte mit dem Fokus. Das Programm soll eigenlich nur ein Workaround für eine Siemens Visualisierung (Unifed) sein. Die Software von Siemens ist relativ neu (4 Jahre) und obwohl es auf js basiert, ist es nicht möglich innerhalb der Software auf einen Scanner in irgendeiner art und weisse zuzugreifen.
Die Empfehlung von Siemens "Schreiben sie Sich in einer Programmiersprache ihrer Wahl ein Programm, um die Scannerdaten zu erhalten. Anschließend übertragen sie die Informationen mittel der openPipe Schnittstelle".
Das Bedeutet ich haben immer ein Aktives fenster das offen und wenn es Ganz blöd läft würden die Scannerdaten dann woanders landen. Daher ist die Lösung mit der Com-Schnittstelle rechts Charmant.