Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-列出设备并知道何时连接_Java_Usb - Fatal编程技术网

Java-列出设备并知道何时连接

Java-列出设备并知道何时连接,java,usb,Java,Usb,我最近编写了一些代码,使用Java中的File.listRoots()在程序启动时获取连接的设备。这在Windows中运行得非常好,但是我读到它在Linux中不起作用,而且我不是Linux用户,所以我只能通过一台我目前无法访问的大学计算机访问Linux。所以我想问两件事: 首先如何使其成为驱动器检测的跨平台解决方案 Second在程序运行时,如何“监听”插入计算机的设备(例如USB),程序必须“监听”并运行事件 我不能给出任何代码,因为它实际上是不相关的,而且我还没有真正实现过很多关于这个特性的

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

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

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

我不能给出任何代码,因为它实际上是不相关的,而且我还没有真正实现过很多关于这个特性的功能,所以请不要问任何关于我的代码可能需要回答的问题。我打赌“监听”设备连接也会“监听”设备断开连接,但如果不是这样,我也想知道解决方法

如果有帮助的话,我在JFrame中工作,我宁愿使用本机Java包来实现它,而不是尽可能使用其他包,即使本机实现可能需要更多的代码和精力

请注意,我使用引号内的侦听,因为我知道这可能不是我所怀疑的情况。

请看一看

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


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

使用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);

        }
      }
    }

可能的重复通常这是一个解决方案,但对我来说不是最佳的,因为我不是100%确定这不能在Java中完成。即使这解决了USB问题,可移植性问题也远未得到解决。。。有谁能帮我吗?如何初始化javax.usb.properties文件?我在这个文件中添加了“javax.usb.services=javax.usb.UsbServices”行介绍,但代码不起作用。