2009-04-19 9 views
5

Sto scrivendo un'applicazione SWT che deve essere inserita nella barra delle applicazioni e visualizzata automaticamente ogni volta che l'utente collega un dispositivo USB (l'applicazione funge da il suo pannello di controllo).SWT: notifica di una modifica del dispositivo di sistema (connessione/disconnessione del dispositivo USB)

Il modo per farlo nell'ambiente nativo (win32 in questo caso, ma in definitiva dovrebbe essere indipendente dalla piattaforma) è ascoltare l'evento WM_DEVICECHANGE, quindi controllare se il mio dispositivo è stato disconnesso.

Googling il soggetto, sembra che SWT non gestisca effettivamente questo tipo di evento. Qualcuno ha qualche idea su come raggiungere questo obiettivo? La mia soluzione di ripiego sarebbe campionamento alla porta USB ogni n secondi, alla ricerca del dispositivo, ma questa è una soluzione no-no per quanto mi riguarda ...

Grazie e applausi

Shai

+0

Per essere chiari, si sta parlando della Standard Widget Toolkit in Java, giusto? In tal caso, aggiungi un tag "Java". O intendi qualche altro SWT? – Jegschemesch

+0

destra. è stato così naturale per me che mi sono completamente dimenticato di aggiungere quello più semplice :) –

+0

Alla fine, ho optato per un listener attivo, eseguendo il polling della DLL del driver USB ogni millisecondi. –

risposta

0

Java non fornisce interazione diretta con i dispositivi e con USB. Esistono diverse librerie di terze parti per Java che forniscono funzionalità relative all'USB (lettura/scrittura dalla porta USB). Ad esempio: http://www.icaste.com/ (commerciale)

+0

Non ho bisogno di una connessione USB - Sto facendo questo usando una DLL fornita con il dispositivo che sto collegando a wrapping da JNA. Ho bisogno di ascoltare il messaggio OS WM_DEVICE_CHANGED. –

1

EDIT: J-16 SDiZ riferito che esiste l'API anche per Windows

Ecco un ottimo articolo su Access USB devices from Java applications

Il modulo jUSB descritti contengono un USBListener oggetto.

Interfaccia implementata da oggetti che desiderano monitorare la struttura USB. L'ordine in cui vengono riportate queste modifiche non è necessariamente l'ordine in cui le modifiche sono state viste nel mondo reale e si verificano anche ritardi.

Youre SWT oggetto può implementare questa ascoltatore e fare qualcosa, quando il metodo

deviceAdded(Device dev) 

è sparato

+0

Per quanto posso vedere, jUSB non supporta win32, che è la piattaforma principale che questa app dovrebbe supportare. –

+0

mi dispiace, la tua destra. Funziona solo per Linux. –

0

il tuo commento su Zorglub suggerisce che avete un po '(presumibilmente) JNI/JNA codice per chiamare la DLL di terze parti citata. Presumo che potresti anche scrivere un wrapper JNI per l'API di Windows in cui puoi registrarti per ricevere notifiche per l'evento _WM_DEVICECHANGE_ che hai menzionato.

+0

che probabilmente sarebbe la cosa giusta da fare, dato che sono disponibili risorse sufficienti per questo sviluppo. Sfortunatamente, questo non è il caso ... Alla fine ho optato per un ascoltatore attivo. –