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

codice:
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;
        }
    }
e questo è il metodo run

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;
            }
       }
    }
se nel run faccio cosi:

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;
    }
funziona solo che poi non riesco più a ricevere dal server le immagini.

Come posso risolvere il problema?