[RESOLVIDO] Problema com USB (jUSB)

6 respostas
E

Olá, pessoal!

Estou tentando fazer um aplicativo que monitore as portas USB e, quando eu inserir um pen drive, ele detecte o dispositivo. Estou usando o jUSB em Windows XP ([url]www.steelbrothers.ch/jusb/[/url]), mas está me retornando o seguinte erro quando eu coloco o pen drive no computador:
Exception in thread "USB-Watcher" java.lang.ArrayIndexOutOfBoundsException: 1
        at usb.core.Descriptor.getU8(Descriptor.java:182)
        at usb.core.Descriptor.getDescriptorType(Descriptor.java:65)
        at usb.core.DeviceDescriptor.<init>(DeviceDescriptor.java:51)
        at usb.windows.NonJUSB.<init>(NonJUSB.java:48)
        at usb.windows.DeviceImpl.enumerateHubPorts(DeviceImpl.java:490)
        at usb.windows.DeviceImpl.checkChildren(DeviceImpl.java:686)
        at usb.windows.DeviceImpl.enumerateHubPorts(DeviceImpl.java:552)
        at usb.windows.DeviceImpl.<init>(DeviceImpl.java:141)
        at usb.windows.NonJUSB.<init>(NonJUSB.java:27)
        at usb.windows.USB.scanBus(USB.java:196)
        at usb.windows.Windows$Watcher.scan(Windows.java:301)
        at usb.windows.Windows$Watcher.run(Windows.java:229)
        at java.lang.Thread.run(Thread.java:662)
Segue o código abaixo:
public void initUsbListeners() throws IOException {
		Host host = HostFactory.getHost();
		if (host == null) {
			return;
		}

		host.addUSBListener(new ControllerUSBListener() {

			@Override
			public void busAdded(Bus bus) throws IOException {
				super.busAdded(bus);
			}

			@Override
			public void busRemoved(Bus bus) throws IOException {
				super.busRemoved(bus);
			}

			@Override
			public void deviceAdded(Device dev) throws IOException {
				super.deviceAdded(dev);
			}

			@Override
			public void deviceRemoved(Device dev) throws IOException {
				super.deviceRemoved(dev);
			}

		});
	}

Como podem ver, o erro não é no meu código.
Por favor, me ajudem a encontrar uma solução.

Obrigada

6 Respostas

E

Ah! Eu só preciso ficar monitorando as portas USB, pra quando alguem colocar um pen drive, meu programa Java descubra e dispare um evento.

Se alguem conhecer outra alternativa além do jUSB, é bem vindo.

E

Olá!
depois de muito pesquisar (quase uma semana), eu encontrei uma solução que atende à minha necessidade:
http://zarelli.wordpress.com/2011/04/27/listar-dispositivos-removiveis-em-java/

Vou ficar monitorando os diretórios raiz e, quando houver uma mudança (significa que alguem inseriu ou removeu um pen drive), eu vou disparar um evento.

Assim que eu terminar o código aqui, e estiver funcionando certinho, vou postar aqui pro pessoal.

J

Eliangela

Pesquisando sobre o meu problema de comunicação serial no linux 64 bits, encontrei esse artigo da IBM, talvez lhe seja útil.
http://www.ibm.com/developerworks/library/j-usb/index.html

fui

E

Resolvido…

Segue o código que eu fiz em anexo.

Como usar:

public static void main(String[] args) {
		try {
			DeviceMonitor device = DeviceFactory.getSystemDeviceMonitor();
			device.addDeviceListener(new DeviceAdapter(){

				@Override
				public void dispositivoInserido(DeviceEvent e) {
					Device device = (Device) e.getSource();
					System.out.println(device.getDescricao());
				}
			});
			
			device.startMonitoramento();
		} catch (UnsupportedOSException ex) {
			JOptionPane.showMessageDialog(this, "Não é possível monitorar as portas USB.\n" +
					ex.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
		}
	}
E

jAsterix:
Eliangela

Pesquisando sobre o meu problema de comunicação serial no linux 64 bits, encontrei esse artigo da IBM, talvez lhe seja útil.
http://www.ibm.com/developerworks/library/j-usb/index.html

fui

Obrigada jAsterix, mas eu só precisava ficar monitorando mesmo, e fazer um EventListener pra isso resolveu meu problema.
Se quiser dar uma olhada no código que eu fiz, fique a vontade. Acho que essa solução ajudaria muita gente que quer trabalhar com unidades removíveis e Java.

J

valeu, obrigado
fui

Criado 8 de junho de 2011
Ultima resposta 8 de jun. de 2011
Respostas 6
Participantes 2