We had the same problem for our USB sensors: There no 100% Java solution. You will always need an OS specific code that is written in another language (and that has access to the native API).
The most portable solution that we have found is to implement a kind of gateway that will encapsulate USB data over a localhost TCP socket. We have 3 implementations of the gateway (OSX, UNIX and Windows) that will call native API to interact with USB device. The Java code will send/receive USB traffic troughs the TCP gateway. We have done some benchmarks and we have measure that the overall difference between a pure C++ code and the Java implementation is less than 10ms (for a large 45ms transaction), while the latency is negligible (no impact) once you have an open channel.
We have written an post that explain our solution here.