PDA

View Full Version : [JAVA] MouseAdapter


feboss
01-04-2008, 16:29
Ho creato un form con netbeans con un paio di bottoni

ora quando nell'evento del bottone inserisco del codice che mi da in output qualcosa, del tipo un ciclo che mi calcoli 100000 numeri primi, mi comunica il risultato tutto in una volta alla fine del processo
io vorrei invece che me lo comunicasse numero per numero


in pratica ho creato una barra di progressione che dovrebbe partirmi quando inizia il processo.però in questo modo parte solo alla fine del processo
btnStart.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
btnStartMouseClicked(evt);
}
private void btnStartMouseClicked(java.awt.event.MouseEvent evt)
{
barra.setIndeterminate(true);
CODICE VARIO
}


dove sbaglio?

banryu79
01-04-2008, 16:38
Ho creato un form con netbeans con un paio di bottoni

ora quando nell'evento del bottone inserisco del codice che mi da in output qualcosa, del tipo un ciclo che mi calcoli 100000 numeri primi, mi comunica il risultato tutto in una volta alla fine del processo
io vorrei invece che me lo comunicasse numero per numero

in pratica ho creato una barra di progressione che dovrebbe partirmi quando inizia il processo.però in questo modo parte solo alla fine del processo


Dove li fai leggere i dati in output alla tua barra di progressione?
Meglio se posti tutto il codice di quello che succede nell'action...

Comunque se devi eseguire del codice "oneroso" è meglio che lo sleghi dal AWT Event thread e lo lanci in un thread a parte, così da lasciare libera l'interfaccia.

andbin
01-04-2008, 16:58
dove sbaglio?Che non puoi impegnare il EDT (event-dispatch-thread) per tutto il tempo che ti pare. Altrimenti a) congeli l'intera interfaccia utente della tua applicazione e b) le modifiche che eventualmente apporti alla interfaccia utente non verranno applicate finché sei tu che stai impegnando il EDT.

feboss
01-04-2008, 17:07
come faccio a lanciarlo in thread a parte?

andbin
01-04-2008, 20:17
come faccio a lanciarlo in thread a parte?Istanziando un Thread creato passando una implementazione di Runnable oppure creando una istanza di una classe che estende Thread. Vedi comunque il tutorial (http://java.sun.com/docs/books/tutorial/essential/concurrency/threads.html) per tutti i dettagli.

Però sappi che questo porta sicuramente ad altre questioni. Se nel "tuo" thread devi andare a modificare la interfaccia utente (set di qualcosa sui componenti ecc....), salvo per casi e operazioni specifiche ben documentate come thread-safe, non puoi farle dal tuo thread ma devi farle nel contesto del EDT.