Autore Topic: Bufferedreader bloccato a causa di una readline()  (Letto 338 volte)

Offline mambu

  • Utente normale
  • ***
  • Post: 167
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Bufferedreader bloccato a causa di una readline()
« il: 03 Luglio 2013, 11:16:10 CEST »
0
Salve ho scritto una semplice applicazione per effettuare un ping e vedere a schermo il risultato. vi allego il codice:
Codice (Java): [Seleziona]
...
p = new ProcessBuilder()
                       .command(comm)
                       .redirectErrorStream(true)
                       .start();
                        in = new BufferedReader(new InputStreamReader(
                                        p.getInputStream()));
                        String inputLine;
                        timeInterval = new Vector<Double>();
                                Log.v("PPP", ""+in.ready());
                        while ((inputLine = in.readLine()) != null) {
                          //lettura inputline e parsering
}
...

ho cominciato a fare dei test di robustezza ed il primo è stato togliergli la connessione dati mentre il ping era attivo, il programma ha dato errore e fin li tutto a posto.
il problema è sorto dopo, rilanciando l'applicazione il programma rimane in stallo(cioè non appariva nulla a schermo) e non riuscivo a capire che succedeva. Ho riavviato il telefono e riavviato l'app ma ancora stallo.
ho cominciato a pensare, tra le cose che mi sono venute in mente ho tracciato il traffico del telefono(con wireshark) e li ho riscontrato una cosa buffa: vedo il traffico ICMP in uscita dal telefono ma sullo schermo non si vede nulla.
facendo un po' di debug riga per riga ho capito che si blocca dopo il lancio del processo, esattamente nel while quando faccio la readline(), allora ho provato a chiuderla correttamente (con in.close)  ma niente rimane bloccato sulla readline e non posso interagire con in(buferereader)
cosa posso fare? spero di essere stato chiaro.

grazie in anticipo
Manuel