[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.

public class Lists {
	volatile List<String> l = new ArrayList<String>();
	public List<String> listDatas(){
		l.add("A");
		l.add("B");
		l.add("C");
		//l.add("D");
		//l.add("E");
		//l.add("F");
		return l;
	}
}

public class RefreshLists {
	public static void main(final String[] args) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				do {
					try {
						Thread.sleep(5 * 1000);
						System.out.println(new Lists().listDatas());
						
					} catch (InterruptedException e) {
						e.printStackTrace();
						System.out.println("Erro ao atualizar lista: "
								+ e.getMessage());
					}
				} while (true);
			}
		}).start();
	}
}

9 Respostas

CyberX
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.

public class Lists {
	volatile List<String> l = new ArrayList<String>();
	public List<String> listDatas(){
		l.add("A");
		l.add("B");
		l.add("C");
		//l.add("D");
		//l.add("E");
		//l.add("F");
		return l;
	}
}

public class RefreshLists {
	public static void main(final String[] args) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				do {
					try {
						Thread.sleep(5 * 1000);
						System.out.println(new Lists().listDatas());
						
					} catch (InterruptedException e) {
						e.printStackTrace();
						System.out.println("Erro ao atualizar lista: "
								+ e.getMessage());
					}
				} while (true);
			}
		}).start();
	}
}
E

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:

public static void main(String[] args){
	new Thread((new Runnable(){
		@Override
		public void run(){
			while (true){
				try{
					Thread.sleep(5000);
					new Thread((new Runnable(){
						@Override
						public void run(){
							System.out.println(new Lists().listDatas()); // Lista Nova
						}
					})).start();
				} catch (InterruptedException e){
					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.

Understood !!

Criado 10 de abril de 2012
Ultima resposta 11 de abr. de 2012
Respostas 9
Participantes 3