Newsgroup: it.comp.java
Titolo: InputStream ASINCRONO

Comincio con lo scusarmi per eventuali termini non corretti. E' poco che sto
studiando Socket, URL, InputStream etc.
Il mio problema è il seguente:
Voglio che durante la fase di lettura di un InputStream (lo stream proviene
da un URL mediante una socket e rappresenta un file XML) voglio visualizzare
una JProgressBar.
Quello che ho fatto fino ad esso funziona, solo che occupa copletamente le
risorse impedendo il dispaccio degli eventi e il ridisegno degli oggetti.
Come posso delegare ad un Thread il compito di fare l'input dello stream
    while((read = in.readLine()) !=null)
e in qualche modo monitorizzare questa operazione + il parsing che ne
seguirebbe, in modo da capire quando il tutto è finito e quindi aggiornare i
dati sulla mia griglia ?
Allego il codice quasi completo :
Socket sok = null;
try{
        URLParser up= new URLParser(url); // Questa è una classe fatta da un
mio amico
        System.out.println(sQuery+jsp);
        sok = new Socket(up.getHost(),up.getPort());
        sok.setSoTimeout(120000);
        BufferedReader in = new BufferedReader(new
InputStreamReader(sok.getInputStream()));
        PrintStream       out = new PrintStream(sok.getOutputStream(),true);
        println("POST "+jsp+" HTTP/1.0");
        out.println("");
        out.println("");
        String read="";
        while((read = in.readLine()) !=null)
        {
            if(read.indexOf("?xml") != -1)
            {
                StringBufferInputStream xml = new
StringBufferInputStream(read);
                parser.spacchetta(xml); // questa classe implementa SAX
                break;
            }
        }
etc.
etc.
Grazie a tutti.

> Come posso delegare ad un Thread il compito di fare l'input dello stream
Io posso darti questo consiglio....
Ti estendi la classe che si occupa della gestione dell'input e la rendi
threadable, a questo
punto ti crei una serie di classi ed interfacce per la gestione e ascolto di
un evento, ad esempio dataArrival(Event E, String Data, ecc, ecc) che viene
fatto ascoltare dalla classe che chiede le informazioni, passando i dati che
ti sono arrivati, a questo punto puoi rendere il tutto asincrono in maniera
pulita.
Ciao
Stelvio

Potresti farmi un esempio scemissimo con qualche riga di commento?
Cmq. grazi mille.

 Potresti farmi un esempio scemissimo con qualche riga di commento?
Se per te è uguale ti posso indicare la struttura, sai...c'è un pò da
scrivere

 scrivere
Immaginavo.........
Va benissimo anche la struttura.
Grazie mille.


/*Ho qualche cosa che può aiutarti...*/
/*Se questa è la classe che usi per gestire input e output*/
public class GestisciStream implements Runnable{
  public GestisciStream() {
  }
  public void run(){
  }
  transient private Vector datiArrivatiListeners;
  public synchronized void addDatiArrivatiListener(DatiArrivatiListener l) {
    Vector v = datiArrivatiListeners == null ? new Vector(2) : (Vector)
datiArrivatiListeners.clone();
    if (!v.contains(l)) {
      v.addElement(l);
      datiArrivatiListeners = v;
    }
  }
  protected void fireDatiEvent(DatiArrivatiEvent e) {
    if (datiArrivatiListeners != null) {
      Vector listeners = datiArrivatiListeners;
      int count = listeners.size();
      for (int i = 0; i < count; i++) {
        ((DatiArrivatiListener) listeners.elementAt(i)).DatiEvent(e);
      }
    }
  }
}//Fine
/*Gli aggiungi i metodi addDatiArrivatiListener e fireDatiEvent che ti
servono per gestire gli eventi i quali vengono devono essere intesi come
    classe Event (class DatiArrivatiEvent extends EventObject) e Interface
(interface DatiArrivatiListener extends EventListener) da te create e
modificate che puoi a questo punto usare per inviare alla tua applicazione i
dati che mano mano arrivano.
Spero di essere stato un pò più chiaro
Ciao
Stelvio*/

Grazie mille per i suggerimenti. Ora la palla (nel senso anche di noia)
passa a me.

una JProgressBar.
[CUT]
Se ne è già parlato e avevo anche postato del codice ;-)
Cerca su google con chiave "per orfeo".
HTH
-- 
Ciao
	Fabrizio C.

Ho guardato su Google, ma ho trovato solo dei post sulla stampa e il mio.
Grazie cmq.

Ho guardato su Google, ma ho trovato solo dei post sulla stampa e il mio.
Un po' brutalmente:
http://groups.google.com/groups?q=%22per+orfeo%22
&hl=it&selm=MPG.16e4c7056f936c039898b1%
40powernews.libero.it
&rnum=5
(tutto sulla stessa linea ;-)
