O objetivo do while é fazer um loop a cada minuto.
nesse loop ele para nos minutos indicados no case do switch e envia uma lista.
Ele está parando no tempo certo porem quando ele encontra um desses minutos ele envia uma nova lista a cada 60 segundos sem parar.
O que posso colocar no default para que apareça nada quando não for algum case?
Dated=newDate();//data atual da máquina intminuto=d.getMinutes();System.out.println(d);while(minuto<60){//enquanto minuto for menor que 60...switch(minuto){case3:enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominiosbreak;case7:enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominiosbreak;case11:enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominiosbreak;case13:enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominiosbreak;case17:enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominiosbreak;case44:// VALOR PARA TESTE;enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominiosbreak;default:break;}//switch termina aquiThread.sleep(60000);// 1 Segundo = 1000 Milissegundos | 1 Minuto = 60000 Milissegundos}//while termina aqui}
Observe que a hora que iniciei o método foi um case então enviou a lista.
Mas o minuto seguinte não era case e continuou imprimindo a cada 60 segundos.
P
pollyanamls1995
Obs: com o if/else não estava acontecendo isso…
J
javaflex
Se funcionava antes por que mudou? Posta com if/else pro pessoal aqui ver a diferença.
while(minuto<60){//enquanto minuto for menor que 60…if(minuto==3){enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominios}elseif(minuto==7){enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominios}elseif(minuto==11){enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominios}elseif(minuto==13){enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominios}elseif(minuto==17){enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominios}elseif(minuto==22){enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominios}
Nunca estás a alterar o minuto depois de entrar dentro do while. Aí ele vai “dormir” 60 segundos e mantem o mesmo valor no minuto, logo vai executar novamente.
while(true){Dated=newDate();//data atual da máquina intminuto=d.getMinutes();System.out.println(d);switch(minuto){case3:case7:case11:case13:case17:case44:enviar_lista_de_palavras();//esse método vai se comunicar com o SistemaGeradorDeDominiosbreak;default:break;}//switch termina aquiThread.sleep(60000);}
O erro de sintaxe foi corrigido porém continua a executar repetidas vezes após encontrar o minuto indicado.
P
pollyanamls1995
Para simplificar eu isolei o método em uma classe só: coloquei seconds ao inves de minutes pra facilitar a verificação
publicstaticvoidiniciar()throwsInterruptedException{Dated=newDate();//data atual da máquina intminuto=d.getSeconds();//aqui coloquei seconds ao inves de minutes pra facilitar a verificaçãoSystem.out.println(d);while(minuto<60){//enquanto minuto for menor que 60...if(minuto==3||minuto==7||minuto==11||minuto==13||minuto==17){System.out.println("minuto indicado");}else{}Thread.sleep(1000);// 1 Segundo = 1000 Milissegundos | 1 Minuto = 60000 Milissegundos}//while termina aqui}
Acontece que quando eu executo exatamente no segundo indicado ele imprime o que foi pedido naquele segundo e ele repete o que foi impresso de segundo em segundo(thread.sleep)
E se por um acaso eu executar fora do segundo indicado ele não reconhece o comando if em momento algum. Reconhece apenas o else.
Para seu caso especifico recomendo você a utilizar Timer e TimerTask, pois eles executam uma função repetidamente em um tempo predeterminado.
S
staroski
Tem certeza de que o método enviar_lista_de_palavras() não está chamando o método iniciar()?
Posta o código do método enviar_lista_de_palavras().
System.out.println("nada");
S
staroski
No método receba_a_lista da classe SistemaGeradorDeDominios, mais precisamente na linha 20, você está tentando atribuir um objeto do tipo ArrayList para uma variável do tipo String.