Какова основная причина сообщения "Поддержка USB-хоста недоступна"?
Я пытаюсь отправить данные через USB на последовательный кабель, используя библиотеку jUSB. Я пишу код в IDE NetBeans на Windows.
В чем заключается проблема с сообщением: "Поддержка USB-хоста недоступна" в следующем коде:
package usb.core;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import usb.core.*;
public class Main {
public static void main(String[] args) throws IOException {
try {
// Bootstrap by getting the USB Host from the HostFactory.
Host host = HostFactory.getHost();
// Obtain a list of the USB buses available on the Host.
Bus[] bus = host.getBusses();
int total_bus = bus.length;
System.out.println(total_bus);
// Traverse through all the USB buses.
for (int i = 0; i < total_bus; i++) {
// Access the root hub on the USB bus and obtain the
// number of USB ports available on the root hub.
Device root = bus[i].getRootHub();
int total_port = root.getNumPorts();
// Traverse through all the USB ports available on the
// root hub. It should be mentioned that the numbering
// starts from 1, not 0.
for (int j = 1; j <= total_port; j++) {
// Obtain the Device connected to the port.
Device device = root.getChild(j);
if (device != null) {
// USB device available, do something here.
// Obtain the current Configuration of the device
// and the number of interfaces available under the
// current Configuration.
Configuration config = device.getConfiguration();
int total_interface = config.getNumInterfaces();
// Traverse through the Interfaces
for (int k = 0; k < total_interface; k++) {
// Access the current Interface and obtain the
// number of endpoints available on the Interface
Interface itf = config.getInterface(k, 0);
int total_ep = itf.getNumEndpoints();
// Traverse through all the endpoints.
for (int l = 0; l < total_ep; l++) {
// Access the endpoint and
// obtain its I/O type
Endpoint ep = itf.getEndpoint(l);
String io_type = ep.getType();
boolean input = ep.isInput();
// If the endpoint is an input endpoint,
// obtain its InputStream and read in data.
if (input) {
InputStream in;
in = ep.getInputStream();
// Read in data here
in.close();
}
else {
// If the Endpoint is an output Endpoint,
// obtain its OutputStream and
// write out data.
OutputStream out;
out = ep.getOutputStream();
// Write out data here.
out.close();
}
}
}
}
}
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
1 ответ
Я погуглил это сообщение об ошибке и обнаружил:
Сообщение на форуме от 2005 года, в котором говорилось, что в Linux это может быть связано с тем, что кто-то еще исключил использование USB-контроллера: http://bytes.com/topic/java/answers/16736-jusb
Интерактивная копия исходного кода, которая указывает, что это происходит, если попытка getHost создать HostFactory (для конкретной платформы) не удалась. К сожалению, код поглощает неожиданные исключения (*), поэтому вам необходимо использовать отладчик Java, чтобы выяснить, что такое настоящий код.
(* Код ловит Exception
в maybeGetHost
и другие места и выбрасывает диагностику! Это главное нет-нет и большой красный флажок общего качества кода библиотеки. На вашем месте я бы искал библиотеку лучшего качества для использования.)