[RESOLVIDO] Problema com USB (jUSB)

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 (www.steelbrothers.ch/jusb/), 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:

[code]
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);
		}

	});
}[/code]

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

Obrigada

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.

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.

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

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);
		}
	}

[quote=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[/quote]

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.

valeu, obrigado
fui