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?