Discussion:
USB (oder RS-232) mit Java?
(zu alt für eine Antwort)
Sebastian Millies
2007-03-05 10:01:31 UTC
Permalink
Ich möchte gerne einen Barcodescanner an die serielle Schnittstelle
(RS 232) oder vorzugsweise die USB-Schnittstelle eines Windows2000
Servers anschließen. Wie kann ich in Java 5 die Daten des Scanners
lesen?

Anscheinend gibt es zur Zeit keine Windows-Implementierung des Java
USB API (JSR 80), die dafür geeignet ist, stimmt's? Auch gibt es keine
Windows-Implementierung des Java Communications 3.0 API.

Ich entwickle zur Zeit auf einer XP SP2 Plattform. Idealerweise suche
ich eine USB-Bibliothek, die sowohl XP SP2 als auch Windows 2000
unterstützt.

Es gibt ein kommerzielles Produkt (www.icaste.com), das funktioniert
lt. Hersteller aber erst ab Windows 2003. Außerdem hab ich mir von
www.steelbrothers.ch/jusb/ Michael Stahls jUSB-Implementierung
gezogen und lt. Doku Kapitel 7 installiert. Ich bekomme aber eine
RunUSBControllerTest: Observation Time = 1s <<<
java.io.IOException: USB Host support is unavailable.
at usb.core.HostFactory.getHost(HostFactory.java:84)
at RunUSBControllerTest.main(RunUSBControllerTest.java:49)

Weiß jemand Rat?

-- Sebastian
Ingo R. Homann
2007-03-05 11:09:04 UTC
Permalink
Hi,
Post by Sebastian Millies
Ich möchte gerne einen Barcodescanner an die serielle Schnittstelle
(RS 232) oder vorzugsweise die USB-Schnittstelle eines Windows2000
Servers anschließen. Wie kann ich in Java 5 die Daten des Scanners
lesen?
Mal ne blöde Frage: Warum? Um die Frage etwas auszubauen: Willst Du
wirklich auf die Roh-Daten des Scanners zugreifen? Oder genügt es nicht,
den Zahlencode auszulesen?

Dazu musst Du nämlich nicht auf USB-Ebene anfangen, rumzufrickeln! Wir
haben hier eine Servlet-Anwendung, die mit Barcode-Scannern arbeiten
kann. Wie das? Ganz einfach: Scanner bzw. deren Treiber können
üblicherweise so eingestellt werden, dass das, was sie liefern,
automatisch in das Textfeld eingegeben wird, welches gerade den Focus
hat. Optional kann zusätzlich noch das Drücken der Enter-Taste simuliert
werden, so dass das Programm gar nicht merkt, ob da wirklioch ein
Barcode-Scanner am Werk ist, oder ob der Benutzer per Tastatur manuell
die Zahl eingetippt hat.

Evtl. sollte man auf das Textfeld sogar verzichten können und einen
'globalen' KeyListener oder InputListener verwenden können!

Ciao,
Ingo
Sebastian Millies
2007-03-05 12:27:39 UTC
Permalink
Post by Ingo R. Homann
Hi,
Post by Sebastian Millies
Ich möchte gerne einen Barcodescanner an die serielle Schnittstelle
(RS 232) oder vorzugsweise die USB-Schnittstelle eines Windows2000
Servers anschließen. Wie kann ich in Java 5 die Daten des Scanners
lesen?
Mal ne blöde Frage: Warum? Um die Frage etwas auszubauen: Willst Du
wirklich auf die Roh-Daten des Scanners zugreifen? Oder genügt es nicht,
den Zahlencode auszulesen?
Dazu musst Du nämlich nicht auf USB-Ebene anfangen, rumzufrickeln! Wir
haben hier eine Servlet-Anwendung, die mit Barcode-Scannern arbeiten
kann. Wie das? Ganz einfach: Scanner bzw. deren Treiber können
üblicherweise so eingestellt werden, dass das, was sie liefern,
automatisch in das Textfeld eingegeben wird, welches gerade den Focus
hat. Optional kann zusätzlich noch das Drücken der Enter-Taste simuliert
werden, so dass das Programm gar nicht merkt, ob da wirklioch ein
Barcode-Scanner am Werk ist, oder ob der Benutzer per Tastatur manuell
die Zahl eingetippt hat.
Evtl. sollte man auf das Textfeld sogar verzichten können und einen
'globalen' KeyListener oder InputListener verwenden können!
Ciao,
Ingo
Ah, ja. Danke für den Hinweis!

Hier handelt es sich eigentlich um eine "oberflächenlose"
Anwendung. Ich muss nur die Zahlencodes auslesen und automatisch
Transportbedarfe in einem Backend-System erzeugen. Ich dachte mir,
am einfachsten geht das, wenn ich irgendwo einen InputStream mit
Zahlencodes lesen kann. Allerdings hindert mich sicherlich niemand,
stattdessen ein Trivial-Gui mit genau einem Textfeld zu bauen.

Ich muss mal feststellen, ob die zu verwendenden Scanner so eingestellt
werden können.

Kannst Du mir sagen, wo ich noch mehr mehr Details nachlesen kann?
Beispielcode? Was macht ihr, wenn der Benutzer den Cursor bewegt, den
Focus wechselt etc.?

Ich denke auch an eine Art Info-Modus - da gäbe es tatsächlich ein Gui,
worauf die kumulierten Bedarfe für das zuletzt gescannte Material angezeigt
werden könnten. Da der Benutzer dafür zwischen zwei Masken umschalten
müsste und die Eingabe nach Deiner Idee immer über die Masken käme, hätte
ich auch kein Problem zu erkennen, ob jetzt Info oder richtige Verarbeitung
gefragt ist (sonst müsste ich immer erst den Puffer komplett leeren oder
so).

Vielen Dank,
Sebastian
Ingo R. Homann
2007-03-05 12:38:53 UTC
Permalink
Hi,
Post by Sebastian Millies
Hier handelt es sich eigentlich um eine "oberflächenlose"
Anwendung. Ich muss nur die Zahlencodes auslesen und automatisch
Transportbedarfe in einem Backend-System erzeugen. Ich dachte mir,
am einfachsten geht das, wenn ich irgendwo einen InputStream mit
Zahlencodes lesen kann. Allerdings hindert mich sicherlich niemand,
stattdessen ein Trivial-Gui mit genau einem Textfeld zu bauen.
Genau.
Post by Sebastian Millies
Ich muss mal feststellen, ob die zu verwendenden Scanner so eingestellt
werden können.
Kannst Du mir sagen, wo ich noch mehr mehr Details nachlesen kann?
In der API-Doku zu AWT/Swing! :-)
Post by Sebastian Millies
Beispielcode? Was macht ihr, wenn der Benutzer den Cursor bewegt, den
Focus wechselt etc.?
Nix machen wir dann. Dem Benutzer unserer Anwendung steht es
selbstverständlich frei, auch andere Anwendungen auf seinem Rechner zu
betreiben oder unsere Anwendung zu schließen. :-)

Allerdings spricht ja nix dagegen, dass sich das (einzige) Textfeld
sofort den Focus holt, wenn das Fenster den Focus bekommt, oder evtl. -
wie gesagt - das Textfeld ganz wegzulassen.
Post by Sebastian Millies
Ich denke auch an eine Art Info-Modus - da gäbe es tatsächlich ein Gui,
worauf die kumulierten Bedarfe für das zuletzt gescannte Material angezeigt
werden könnten.
Ist sowieso IMHO nicht schlecht - alleine um zu sehen, ob der
Scan-Vorgang erfolgreich war. Neben dem eigentlichen Einscannen (welches
ja üblicherweise durch einen Piepton bestätigt wird) kann ja noch mehr
schiefgehen, was der Scanner gar nicht mitbekommt (z.B. Einscannen einer
ID, die im System gar nicht mehr vorliegt).

Ciao,
Ingo
PeteM
2007-03-06 08:16:51 UTC
Permalink
Wenn du eine Eingabemaske anlegen kannst, dann kannst du dir den
Stress mit der Schnittstelle sparen;
Ei externes Programm könnte die Sccannerdaten einlesen und an deine
Applikation über den Tastaturpuffer weiter geben:
http://www.serielleSchnittstelle.de

Kurt Harders
2007-03-05 14:05:30 UTC
Permalink
Hallo Sebastian,
Post by Sebastian Millies
Ich möchte gerne einen Barcodescanner an die serielle Schnittstelle
(RS 232) oder vorzugsweise die USB-Schnittstelle eines Windows2000
Servers anschließen. Wie kann ich in Java 5 die Daten des Scanners
lesen?
Das sollte doch mit der rxtx-Software und einem USB2SER-Adapter kein
Problem sein.
Post by Sebastian Millies
Anscheinend gibt es zur Zeit keine Windows-Implementierung des Java
USB API (JSR 80), die dafür geeignet ist, stimmt's? Auch gibt es keine
Windows-Implementierung des Java Communications 3.0 API.
Es sollte doch RS232 (COM-Port) reichen.

Grüße, Kurt
--
Kurt Harders
PiN GITmbH http://www.pin-gmbh.com
Lesen Sie weiter auf narkive:
Suchergebnisse für 'USB (oder RS-232) mit Java?' (Fragen und Antworten)
3
Antworten
LED's an PC anschließen?
gestartet 2009-02-16 06:21:15 UTC
programmierung & design
Loading...