Newsgroup: it.comp.java
Titolo: Thread & GUI

Salve a tutti ,
ho un problema che non riesco a risolvere :
ho realizzato un semplice portscanner comandato da una GUI ,
direi che funziona anche decentemente se non fosse per il fatto che
dopo aver effettuato uno scan di range di IP e dopo aver ritornato i
risultati (IP , porta ecc ecc) x effettuare un altro scan devo
necessariamente riavviare il programma !   :(
semplicemente x avviare il tutto dalla GUI faccio :
public void actionPerformed(ActionEvent ev){
   if(ev.getSource()==button){
      scanner.valore=true; //anche inutile ...
      scanner.start();
     button.setText("Ricerca in corso");
      }
   }
dove scanner č l'istanza della classe che scanna il range di IP , ed č
implementata con una sorta di classico :
public void run()
{
 System.out.println("scan iniziato");
   while(valore==true)  // le ho provate tutte (qui basterebbe true)
   {
   // vari metodi che performano lo scanning
   // ...
   //  textarea.append(risultato dello scanning);
   }
  System.out.println("scan finito");
  stop(); //deprecato lo so ... ma le sto provando tutte !!  :)
}
Quando lo scan finisce e clicco ancora sul button non succede + nulla.
Sto tralasciando qualche aspetto saliente che mi sfugge ??
Beh , direi di si .......
Attendo consigli .
grazie & ciao

 
si, okkio a come usi i thread con le interfacce grafiche guarda qui e trovi 
la spiegazione dettagliata del perche il tuo programmino non funziona
http://java.sun.com/docs/books/tutorial/uiswing/mini/threads.html
in particolare guarda la: single thread rule...
  bye bye
     bEPpE

     bEPpE
....inoltre (mi sembra) il documento in questione si riferisce ai
"paint" degli elementi GUI , mentre nel mio caso (.....boh magari č
correlato e non l'ho capito....) dopo la prima esecuzione del metodo
run() (con relativi update GUI prodotti) , al tentativo di rifar
ripartire "ciň che il software dovrebbe fare (il metodo run del
thread)" , non accade nulla .
neanche la
System.out.println("scan iniziato");
che si trova come prima linea di codice nel run() viene eseguita ,
da cui ne deduco che terminata "una prima esecuzione"
ad un "ulteriore tentativo" i thread non partono piů .
Non so e non ho capito il perchč neanche leggendo il documento che mi
hai gentilmente indicato .....   :(
Addirittura , dimenticando il software che stavo realizzando ho
provato a fare una gui con una label , al cui click parte il seguente
thread:
public void run()
    {
    System.out.println("tred partito");
        while(tredbool==true)
        {
        try
        {
         sleep(6000);
         //parent č il "riferimento" alla gui
         parent.label.setText("ciao sono tred"); 
         tredbool=false;
        }catch(Exception e){}
    }
    parent.label.setText("tred finito");
}
Ovviamente dopo una prima esecuzione dopo non va + !
Aiutatemi a capire e vi offro una pizza  :)
tnx
grazie e ciao

Ciao.
Potrebbe essere che tu crei un'unica istanza di Thread, la avvii nel corpo
del metodo actionPerformed e poi la termini quando ha finito il suo lavoro;
a quel punto tenti di ristartare la stessa istanza di Thread, che però non
può più essere riavviata.....non ne son sicuro ma penso che sulla stessa
istanza di thread si possa invocare lo start una sola volta; chiamato n
altre volte non lancia eccezioni ma nemmeno combina qualcosa; prendi il
suggerimento con le molle, non ne sono affatto sicuro, mi par di ricordare
che funzioni così; in ogni caso fai una prova, ci vuol giusto un attimo; ti
basterà istanziare il thread nel metodo actionPerformed di modo da esser
sicuro di impiegare sempre una nuova istanza ad ogni click; se in più usi i
Thread in ambito awt/swing considera l'opportunità di impiegare
SwingUtilities.invokeLater(Runnable r)....confronta il javadoc e qualsiasi
altra documentazione a riguardo.....
Buon lavoro.

Buon lavoro.
Grazie , mi sei stato di grandissimo aiuto !
L'errore che facevo era piuttosto "grossolano" , tentare di far
ripartire un thread fermato con il metodo stop() poi ........   :)
tnx a tutti