Problema com Threads [RESOLVIDO]

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

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…

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…

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

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

é 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!!!

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…

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

será que é esse:

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

??

valeu!

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

valeu!!!

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…)

[code]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);
	
}

}[/code]

valeu, vou testar e tentar adequar ao meu sistema…

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

é 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

obrigado…

: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…

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); }