Ho iniziato a scuola a realizzare un programma di IM e tra le funzionalità che volevo fare è di dare la possibilità agli utenti di avere una foto personale. Il problema è che il se il metodo run del thread lo metto in ascolto poi non riesco a ricevere nel metodo invia la risposta dal server se può caricare o no l'immagine. Ecco il codice:
la classe che invia le immagini
e questo è il metodo runcodice:public boolean inviaImmagine(byte[] b) throws IOException{ this.busy=true; DataOutputStream out=new DataOutputStream(client.getOutputStream()); this.inviaNotifica("[CaricaImmagine:"+b.length+"]"); String mes=this.riceviMessaggio(); System.out.println(mes); if(mes.equals("[InviaImmagine]")){ System.out.println("Ricevuto conferma. Invio Buffer"); out.write(b); System.out.println("Finito invio immagine!"); out.flush(); busy=false; this.runner.start(); return true; } else{ busy=false; this.runner.start(); return false; } }
se nel run faccio cosi:codice:public void run() { String mess; while(true){ try { mess = this.riceviMessaggio(); System.out.println(mess); if(mess.contains("[RiceviImmagine:")){ this.riceviImmagine(mess.substring(mess.indexOf("[RiceviImmagine:"),mess.indexOf(";")),Integer.parseInt(mess.substring(mess.indexOf(";")+1,mess.indexOf("]")))); do{ this.runner.sleep(100); }while(this.busy); } } catch (InterruptedException ex) { Logger.getLogger(ThreadGestioneFile.class.getName()).log(Level.SEVERE, null, ex); break; } catch (IOException ex) { Logger.getLogger(ThreadGestioneFile.class.getName()).log(Level.SEVERE, null, ex); break; } } }
funziona solo che poi non riesco più a ricevere dal server le immagini.codice:public void run() { while(true){ try { do{ this.runner.sleep(100); }while(this.busy); } } catch (InterruptedException ex) { Logger.getLogger(ThreadGestioneFile.class.getName()).log(Level.SEVERE, null, ex); break; }
Come posso risolvere il problema?


Rispondi quotando

