2010-01-23 7 views
21

Ich versuche eine Java-Anwendung zu schreiben, die auf die USB-Ports zugreifen, um von einem Gerät zu lesen und zu schreiben, das über USB verbunden ist. Das Problem, dem ich gegenüberstehe, ist, dass ich nicht weiß, was genau ich in Java verwenden soll, um so etwas zu tun. Ich suchte online und fand etwas namens JUSB, aber alle Beiträge scheinen ziemlich alt zu sein.Zugriff auf USB-Ports in Java

Derzeit verwende ich die RXTX Bibliotheken, aber ich manchmal in einigen Sync-Fehler. Wenn ich C# benutze, um das Äquivalent zu machen, benötigt es weit weniger Code und ich sehe keinen der gleichen Synchronisierungsfehler.

Meine Frage ist, gibt es etwas, die neueste Version der JRE gebaut I in die USB-Anschlüsse zugreifen können (, die genauso einfach wie die äquivalente C# -Code ist)?

Antwort

11

Es gibt nichts, das zu C# 's USB-Unterstützung in Java äquivalent ist. Sowohl jUSB als auch Java-USB sind stark veraltet und wahrscheinlich für eine ernsthafte Anwendungsentwicklung nicht verwendbar.

Wenn Sie eine plattformübergreifende USB-Anwendung implementieren möchten, sollten Sie am besten eine abstrakte JNI-Schnittstelle schreiben, die mit nativen Linux-, Mac- und Windows-Bibliotheken kommuniziert, die Sie selbst schreiben müssen. Ich würde LibUSB betrachten, um Mac und Linux zu behandeln. Windows ist, wie Sie gesehen haben, ziemlich einfach. Ich kam gerade von einem einjährigen Projekt, das genau dies getan hat, und leider ist dies die einzige ernsthafte Cross-Plattform-Lösung. Wenn Sie nicht unter Windows implementieren müssen und Ihre Anforderungen begrenzt sind, können Sie mit einer der älteren Java-Bibliotheken (jUSB oder Java-USB) auskommen. Alles, was auf Win32/Win64 bereitgestellt werden muss, benötigt eine native Komponente.

2

Die Java Communications API. Dies sollte eine ähnliche Funktionalität wie der C# System.IO.Ports Namespace bereitstellen.

+1

System.IO.Ports ist für die serielle Kommunikation vorgesehen, es sei denn, das OP weist eine seriell-zu-USB-Schnittstelle auf ?! – t0mm13b

+0

Einverstanden - System.IO.Ports hat keine USB-Schnittstellen, nur für Com-Ports. –

+0

Wenn Ihr USB-Gerät an einem COM-Port verfügbar ist, können Sie System.IO.Ports verwenden. –

4

Siehe die jUSB oder usb4java Bibliotheken.

+5

Java-USB ist nur Linux.Wenn das alles ist, was Sie brauchen, kann es funktionieren, obwohl es seit einiger Zeit nicht mehr aktualisiert zu sein scheint. –

5

Sie möchten vielleicht einen Blick auf usb4java werfen - http://usb4java.org/index.html es scheint Windows, Linux und Mac OS zu unterstützen und scheint zum Zeitpunkt des Postings ziemlich aktuell zu sein. Ist unter der LGPL leider nicht so geeignet für die kommerzielle Entwicklung.

+2

Die Verknüpfung mit LGPL-Bibliotheken sollte kein Problem darstellen, wenn Sie nur ihre APIs in Ihrem Code verwenden (und Sie haben keine LGPL-Lizenz). GPL-lizensierte Bibliotheken sind Copyleft-Lizenzen und zwingen Ihre Code-Lizenz dazu, eine GPL-Lizenz zu sein, unabhängig davon, welche Lizenz Sie verwendet haben. – Joseph

18

Wir haben usb4java seit einem Jahr auf Cross-Plattform (Linux und Windows) und es funktioniert super.

See:

http://usb4java.org/

Sie sind sehr aktiv und haben eine sehr gute javax USB Front.