Bom dia pessoal!
Estou com uma dúvida no meu algoritmo se alguém puder me ajudar vai ser muito gratificante!!!
Bom, eu preciso receber um valor determinado de vezes o update de uma thread observada pelo algoritmo abaixo. Acontece que mesmo depois que termino de receber tudo, EndOfSimulation (EOS), o método update deste código abaixo continua de alguma forma entrando em algum loop.
Logo abaixo do código eu tenho o método aiFlag que serve para informat ao consultor da classe main que toda simulação ja foi recebida e que pode ser copiado os ArrayLists. Porém quando eu tento pela classe main dar o comando array = aiObserver.getCanais ou getCanaisAoz, simplesmente o programa emperra infinitamente...
Alguém tem alguma idéia?
Valew abracos a todos...
package aoz;
import java.util.Observer;
import java.util.Observable;
import java.util.Random;
import java.util.ArrayList;
import avisaStarter.avisaStarterThread;
/**
*
* @author Fabio
*/
public class aiObserver implements Observer {
String resposta; int flag = 0; boolean go = true;
Random random = new Random();
ArrayList<Canais> canais = new ArrayList<Canais>();// cria arraylist canais
ArrayList<CanaisAOZ> canaisAoz = new ArrayList<CanaisAOZ>();// cria arraylist canaisAoz
leServidores lS = new leServidores();// metodo leServidores le servidores em arquivo servidores.txt
String[] ipCanais = lS.leServidores();// recebe servidores através de um arquivo servidores.txt
public void update(Observable o, Object arg){
if (arg instanceof String){
resposta = (String) arg;
//System.out.println("\nReceived Response: "+ resposta );
while(go == true){
this.simulations(resposta);
String[] teste = resposta.split(";");
if(teste[0].equals("EOS")){//tentativa de evitar o loop
go = false;
}
}
}
}
public void simulations(String simulacao){
String[] entrada = simulacao.split(";");
int canal; String arquivo; String tipoCanal; int servidor;
if(entrada[0].equals("enviandoCanalSimples")){
canal = Integer.parseInt(entrada[1]); arquivo = entrada[2]; tipoCanal = entrada[3];
servidor = random.nextInt(10);
canais.add(new Canais(canal, arquivo,
ipCanais[servidor], true, tipoCanal));
String mensagem = "Simulacao Comum: Indice(" + servidor + ") | Servidor(" + ipCanais[servidor] + ")";
new avisaStarterThread(mensagem).start();
}
if(entrada[0].equals("enviandoCanalAOZ")){
canal = Integer.parseInt(entrada[1]); arquivo = entrada[2]; tipoCanal = entrada[3];
servidor = random.nextInt(10);
canaisAoz.add(new CanaisAOZ(canal,
arquivo, ipCanais[servidor], true, tipoCanal));
String mensagem = "Simulacao AOZ: Indice(" + servidor + ") | Servidor(" + ipCanais[servidor] + ")";
new avisaStarterThread(mensagem).start();
}
if(entrada[0].equals("EOS")){
flag = 1;
}
}
public int flag(){
return flag;//0 se n√£o est√° pronto, 1 para ok!
}
public ArrayList getCanais(){
return canais;
}
public ArrayList getCanaisAOZ(){
return canaisAoz;
}
}