我最近编写了一些代码,在Java中使用File.listRoots()
来启动程序启动时连接的设备。这在Windows中运行得非常好,但是我读到它在Linux中不起作用而且我不是Linux用户,所以我对Linux的唯一访问权限是通过我目前无法访问的大学计算机。所以我想问两件事:
首先如何使其成为驱动器检测的跨平台解决方案。
第二次我如何“倾听”插入的设备,例如程序运行时USB插入计算机必须由程序“监听”并运行事件。
我无法提供任何代码,因为它实际上是无关紧要的,我还没有真正实现这个功能,所以请提出任何可能需要回答我的代码的问题。我敢打赌,“倾听”设备连接也将“监听”设备断开连接,但如果不是这种情况,我也想知道解决方案。
我在JFrame中工作,如果它有帮助,我宁愿使用本机Java包来实现它,而不是使用其他包IF可能,即使本机实现可能需要更多的代码和工作!
请注意,我在引号内使用,因为我知道这可能不是我怀疑的情况。
答案 0 :(得分:2)
这是一个跨平台的人机接口设备(HID)库,可在Windows,Mac和Linux上运行。它为每个库提供了所有本机库,并且在Java中具有易于使用的界面。文档有点稀疏,但它应该能让您快速启动并运行。
在您的情况下,您可以维护一个后台线程来监视已连接设备的列表。当列表在一个快照和下一个快照之间发生变化时,您可以向您的应用程序发送一个事件。
答案 1 :(得分:1)
使用javax.usb库,我们可以获取有关UsbHostManager的信息,但不能轻易获取正在连接的设备。
import java.util.*;
import javax.usb.*;
public class USBLister {
public static void main(String[] args) throws UsbException {
//Get UsbHub
UsbServices services = UsbHostManager.getUsbServices();
UsbHub root = services.getRootUsbHub();
listPeripherique(root);
}
public static void listPeripherique(UsbHub hub) {
//List all the USBs attached
List perepheriques = hub.getAttachedUsbDevices();
Iterator iterator = perepheriques.iterator();
while (iterator.hasNext()) {
UsbDevice perepherique = (UsbDevice) iterator.next();
System.out.println(perepherique);
if (perepherique.isUsbHub())
listPeripherique((UsbHub) perepherique);
}
}
}