[Resolved] Executar Refresh de 5 seg em outra classe
9 respostas
CyberX
Hi, There!
Salve, Salve… tenho uma classe de exemplo chamada RefreshLists que deveria atualizar as informações de Lists de 5 em 5 segundos. Mas ao adicionar novo
dado na classe Lists o mesmo não é atualizado.
Gostaria de saber com faço para que minha classe RefreshLists possa atualizar as informações adicionadas na classe Lists sem ter que executar o programa novamente.
publicclassLists{volatileList<String>l=newArrayList<String>();publicList<String>listDatas(){l.add("A");l.add("B");l.add("C");//l.add("D");//l.add("E");//l.add("F");returnl;}}publicclassRefreshLists{publicstaticvoidmain(finalString[]args){newThread(newRunnable(){@Overridepublicvoidrun(){do{try{Thread.sleep(5*1000);System.out.println(newLists().listDatas());}catch(InterruptedExceptione){e.printStackTrace();System.out.println("Erro ao atualizar lista: "+e.getMessage());}}while(true);}}).start();}}
Salve, Salve... tenho uma classe de exemplo chamada RefreshLists que deveria atualizar as informações de Lists de 5 em 5 segundos. Mas ao adicionar novo
dado na classe Lists o mesmo não é atualizado.
Gostaria de saber com faço para que minha classe RefreshLists possa atualizar as informações adicionadas na classe Lists sem ter que executar o programa novamente.
publicclassLists{volatileList<String>l=newArrayList<String>();publicList<String>listDatas(){l.add("A");l.add("B");l.add("C");//l.add("D");//l.add("E");//l.add("F");returnl;}}publicclassRefreshLists{publicstaticvoidmain(finalString[]args){newThread(newRunnable(){@Overridepublicvoidrun(){do{try{Thread.sleep(5*1000);System.out.println(newLists().listDatas());}catch(InterruptedExceptione){e.printStackTrace();System.out.println("Erro ao atualizar lista: "+e.getMessage());}}while(true);}}).start();}}
E
eduJava
sua lista é fixa
coloque valores dinamicos, pegue algum valor randomico com Math.random() ou de algum arquivo ou de algum banco de dados
CyberX
eduJava:
sua lista é fixa
coloque valores dinamicos, pegue algum valor randomico com Math.random() ou de algum arquivo ou de algum banco de dados
Então você assevera que dessa forma não é possível exibir o valor alterado no console, somente se for um valor dinâmico (random, properties ou do BD), correto ?
Waiting…
Rodrigo_Sasaki
Desculpa, mas tem algum motivo específico pra você querer fazer isso? ou só pra estudo?
CyberX
digaoneves:
Desculpa, mas tem algum motivo específico pra você querer fazer isso? ou só pra estudo?
O Postado é somente um exemplo, porém será executado dessa forma em algúm momento na aplicação quando for gerado uma classe, através de um gerador de classes.
O comportamento é complexo e por esse motivo foi postado de uma maneira mais simplória possível.
Understand ?
Tks.
Rodrigo_Sasaki
Bom… então no caso acho que você quer fazer algo assim:
publicstaticvoidmain(String[]args){newThread((newRunnable(){@Overridepublicvoidrun(){while(true){try{Thread.sleep(5000);newThread((newRunnable(){@Overridepublicvoidrun(){System.out.println(newLists().listDatas());// Lista Nova}})).start();}catch(InterruptedExceptione){System.out.println("Thread interrompida.");}}}})).start();}
Lembrando: Você não está atualizando a lista aí, está instanciando uma nova na hora de imprimir… mas como não sei bem o que você quer fazer, deixei como está no seu código.
CyberX
Valeu pela ajuda.
Depois de avaliar o caso cheguei a conclusão que terei que criar uma condição dessa de Refresh em um controller de ação ou trigger dentro do gerador para que funcione.
Se eu tiver sucesso com a analise retorno e informarei a solução.
Tks people.
Rodrigo_Sasaki
É… acho importante você analisar a necessidade disso… o quando você precisa dessa lista atualizada, e tratar dessa forma.
Simplesmente rodar isso em uma thread de 5 em 5 segundos não é uma boa solução… 5 segundos é tempo suficiente pra acontecer muita coisa.
CyberX
digaoneves:
É… acho importante você analisar a necessidade disso… o quando você precisa dessa lista atualizada, e tratar dessa forma.
Simplesmente rodar isso em uma thread de 5 em 5 segundos não é uma boa solução… 5 segundos é tempo suficiente pra acontecer muita coisa.