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