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?
public static void iniciar() throws InterruptedException {
//criei esse método para iniciar o Sistema…
//agora vamos, dentro desse método:
// 1)Observar a hora;
// 2)quando chegar a hora especifica enviar uma lista de palavras;
Date d = new Date(); //data atual da máquina
int minuto = d.getMinutes();
System.out.println(d);
while(minuto < 60) { //enquanto minuto for menor que 60...
switch (minuto) {
case 3:
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
break;
case 7:
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
break;
case 11:
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
break;
case 13:
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
break;
case 17:
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
break;
case 44: // VALOR PARA TESTE;
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
break;
default:
break;
} //switch termina aqui
Thread.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.
Esse código abaixo, com if, dá o seguinte erro:
Exception in thread “main” java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
at pollyana.SistemaGeradorDeDominios.receba_a_lista(SistemaGeradorDeDominios.java:20)
at pollyana.SistemaFornecedorDePalavras.enviar_lista_de_palavras(SistemaFornecedorDePalavras.java:53)
at pollyana.SistemaFornecedorDePalavras.iniciar(SistemaFornecedorDePalavras.java:42)
at pollyana.SistemaFornecedorDePalavras.main(SistemaFornecedorDePalavras.java:12)
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
}
else if (minuto == 7) {
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
}
else if (minuto == 11) {
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
}
else if (minuto == 13) {
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
}
else if (minuto == 17) {
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
}
else if (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) {
Date d = new Date(); //data atual da máquina
int minuto = d.getMinutes();
System.out.println(d);
switch (minuto) {
case 3:
case 7:
case 11:
case 13:
case 17:
case 44:
enviar_lista_de_palavras(); //esse método vai se comunicar com o SistemaGeradorDeDominios
break;
default:
break;
} //switch termina aqui
Thread.sleep(60000);
}
Para simplificar eu isolei o método em uma classe só: coloquei seconds ao inves de minutes pra facilitar a verificação
public static void iniciar() throws InterruptedException {
Date d = new Date(); //data atual da máquina
int minuto = d.getSeconds(); //aqui coloquei seconds ao inves de minutes pra facilitar a verificação
System.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.
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.