3

我最近正在编写一些File.listRoots()在 Java 中使用的代码,以便在程序启动时获取连接的设备。这在 Windows 中工作得非常好,但是我读到它在 Linux 中不起作用,而且我不是 Linux 用户,所以我只能通过我目前无法访问的大学计算机访问 Linux。所以我想问两件事:

首先如何使它成为驱动检测的跨平台解决方案。

其次,如何在程序运行时“监听”插入的设备,例如插入计算机的 USB 必须由程序“监听”并运行事件。

我不能提供任何代码,因为它真的无关紧要,而且我还没有真正实现这个功能,所以请询问任何可能需要回答的关于我的代码的问题。我敢打赌,“监听”设备连接也会“监听”设备断开连接,但如果不是这种情况,我也想知道解决方案。

如果这有帮助的话,我会在 JFrame 中工作,我宁愿使用原生 Java 包来实现它,而不是使用其他包(如果可能),即使原生实现可能需要更多的代码和努力!

请注意,我使用引号内的侦听,因为我知道这可能不会像我怀疑的那样。

4

2 回答 2

3

看看JavaHIDAPI

这是一个跨平台的人机接口设备 (HID) 库,适用于 Windows、Mac 和 Linux。它为每个库提供了所有本地库,并在 Java 中具有易于使用的界面。文档有点稀疏,但它应该可以让您快速启动并运行。

在您的情况下,您可以维护一个后台线程来监视已连接设备的列表。当列表在一个快照和下一个快照之间发生变化时,您可以向您的应用程序发送一个事件。

于 2013-08-28T08:45:50.007 回答
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);

        }
      }
    }
于 2015-03-24T10:56:51.667 回答