这个问题似乎是一半的设计,一半的实现。似乎您最担心要为Java
USB服务(例如jUSB)找到某种方式来服务系统中的热插拔事件,从而使您可以通过控制反转来调用一个事件,而不是运行一个线程来热情地和迭代地轮询系统中的线程。背景。
您所寻求的支持早在2005年就以JSR-80的形式实现,并且
javax-usb在SourceForge上所有超出其商业支持的大型项目中似乎都可以继续使用。请注意,在他们的玩具示例中(
javax-usb-example/src/ShowTopology.java),他们的 首选 模型仍然基于轮询。
但是,并不是所有的东西都丢失了!在的属性文件中
javax.usb,我们发现:
#如果应使用轮询而不是等待热插拔通知。
#某些内核版本存在错误,并且只有在唤醒等待设备文件的线程之后几秒钟才更新设备节点。如果在中等负载到重负载的系统上没有出现热插拔事件,请使用轮询。
#注意,由于新的(buggy?)内核行为破坏了javax.usb,因此默认为true!
#如果您知道内核没有损坏,可以将其设置为false。
#com.ibm.jusb.os.linux.LinuxUsbServices.topologyUpdateUsePolling = true
在中
javax-usb/src/javax/usb/event/UsbServicesListener.java,我们看到了用于设置USB事件侦听器的模型,当设备与系统连接或分离时,您可以继续使用该模型。外部没有提供有关此方法是否可行的文档
, 但是文档本身似乎已经有8年的历史了。
因此,可以合理地假设,尽管 理论上
存在这种支持,但它是滞后的,陈旧的,并且迫切需要社区进行更新。SO上的这个好的社区可以帮助解决这类问题,因此,我将直接指向项目本身作为结束。
目前,在存在增强的硬件或热插拔支持之前,轮询仍然是最好的解决方案。
(的附加参考实现
javax-usb)



