Problema com Threads [RESOLVIDO]

15 respostas
zicky23

Olá pessoal gostaria que me ajudassem com um probleminha vou mostrar os códigos abaixo.

private void TimerAddOnTime(java.awt.event.ActionEvent evt) { // TODO add your handling code here: count3++; if(count3 <= 3){ System.out.println("segundos: "+count3); }else{ jLabel13.setText(""); TimerAdd.stop(); } }

aqui nesse TimerAdd faço um if para que ao clicar no botao com código abaixo ele inicie um evento que dure 3 segundos mostrando uma msg nesse período, após qro que apague essa msg, porém nao está funcionando da maneira correta, as vezes quando clico da certo, mas qdo clico novamente ou a msg nao apaga mais, ou ela fica piscando e depois some… o que estou fazendo de errado?

abaixo o código do button que clico…

private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: jLabel13.setForeground(Color.red); jLabel13.setText("Linha adicionada!"); //mensagem que qro que apareça por determinado tempo. count3 = 0; TimerAdd.setDelay(1000); TimerAdd.start(); addLinha(); UltimoMov(); }

valeu pessoal

15 Respostas

R_chieck

Ola, não sei se é o seu caso, mas nunca tive muito sucesso com .stop(); da thread, também nunca corri mto atraz disso para ver porque não funciona. pode ser que seja esse seu problema…

zicky23

humm, pode ser

mas será que se eu tirar o .stop() não irá criar um loop infinito, pois ai ele não vai parar de contar…??

valeu…

L

Qual é a classe do TimerAdd? Ficou faltando para poder ajudar melhor!

Normalmente, Thread.stop() não é recomendado. Mas, TimerAdd não parece ser Thread…

zicky23

é da Classe Timer, peguei esses códigos de umas vídeos aulas do neri como se fosse threads… será que to errado?

me da uma mão ai…

valeu!!!

L

E o pacote? :slight_smile: Quando for falar de uma classe, sempre dê o nome todo, como por exemplo java.util.Date.

Se for a javax.swing.Timer, ela não é uma Thread, ou tanto faz, não tem como saber e nem precisa! Você pode sim chamar um .stop() para parar (não tem nada falando na API).

Porém, não parece ser a swing…

ViniGodoy

Você pode usar o stop() do timer. O único stop() que é proibido é o da Thread.

zicky23

será que é esse:

Class org.netbeans.examples.lib.timerbean.Timer

??

valeu!

zicky23

Baixei esse TimerBean.jar da internet, seguindo exemplos dos Vídeos do Neri…

valeu!!!

L

Não conheço a classe que você mencionou.

Mas fiz um exemplo do que você está fazendo. (Está tudo junto num grande main, mas é só para utilizar de exemplo hein!) Pode utilizar de exemplo, mas não sei se isso é o melhor jeito de fazer em Swing (não sou acostumado com telas...)

public class Main {
	
	public static void main(String[] args) {
		final Timer timer = new Timer("Botão", true); //vamos usar o Timer padrão do Java para fazer as tarefas de fundo
		final JLabel lbl1 = new JLabel("Aperte o botão!"); //label com o texto que vai mudar
		final JButton btn1 = new JButton("Aperta!"); //botão que dispara a mudança
		
		btn1.addActionListener(new ActionListener() { //adiciona a reação ao botão
			
			@Override
			public void actionPerformed(ActionEvent e) {
				lbl1.setText("Você apertou!");  //define o texto novo
				btn1.setEnabled(false); //desabilita o botão, para a pessoa esperar
				btn1.setText("Espera..."); //muda o texto do botão, porque sim
				
				timer.schedule(new TimerTask() { //agenda o "reset": limpa o texto e habilita o botão
					
					@Override
					public void run() {
						//vamos apagar o texto e habilitar o botão
						lbl1.setText("Aperta agora!");
						btn1.setText("Aperte!");
						btn1.setEnabled(true);
					}
				}, 3000); //essa chamada faz o TimerTask ser executado em 3 segundos
			}
		});

                                //padrão para montar a tela
		JPanel jp = new JPanel(); 
		jp.add(lbl1);
		jp.add(btn1);
		
		JFrame jf = new JFrame("Demo java.util.Timer");
		jf.add(jp);
		
		jf.pack();
		jf.setVisible(true);
		
	}
}
zicky23

valeu, vou testar e tentar adequar ao meu sistema…

ViniGodoy

Tópico movido para o fórum de java avançado.

zicky23

é isso mesmo que tava precisando!!!

valeu, vou adequá-lo agora no meu sistema!!!

avisarei e postarei o código para que outros programadores na mesma situação possam se utilizar desse tópico!

valeu

zicky23

obrigado…

L

:thumbup:

Recomendo, porém, que você utilize o guia do Java para SwingWorker se for fazer telas, acho que é mais interessante!

Aí você posta um demo…

zicky23

bom ficou perfeito…!

muito obrigado pessoal… ficou assim:

private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: final Timer timer = new Timer("Add linha", true); jLabel13.setText("Nova linha adicionada!"); addLinha(); UltimoMov(); timer.schedule(new TimerTask() { @Override public void run() { jLabel13.setText(""); } }, 3000); }

Criado 19 de maio de 2011
Ultima resposta 19 de mai. de 2011
Respostas 15
Participantes 4