Cronometro em java com erros

8 respostas Resolvido
java
M

Opa galera, estou criando um aplicativo em Java swing e estou com um problema para criar um cronometro de contagem regressiva. O problema é bem “simples”, o código está funcionando, o problema é que não está aparecendo nada na JLabel da interface… ai está o código pra quem puder e quiser me ajudar:

public class Principal extends javax.swing.JFrame {
  
	private void botaoInicioPararActionPerformed(java.awt.event.ActionEvent evt) {                                                 

    Time j= new Time();
    Thread th= new Thread(j);
    th.start();
 
               
    }                                                

    public void recebe(String mensagem){
    
        labelTempo.setText(mensagem);//labelTempo não está apresentando a mensagem
        
    }
  
}

public class Time implements Runnable{        
    
    public void run(){
    
        int min=2, seg=0;
        Principal j= new Principal();
        
        try{
            
            j.recebe("0"+min+":"+seg);
            System.out.println("0"+min+":"+seg);
            
            for(min=1; min>=0; min--){
        
               for(seg=59; seg>=0; seg--){
                   
                   Thread.sleep(1000);
                   j.recebe("0"+min+":"+seg);
                   System.out.println("0"+min+":"+seg);

               }
        
               
            }
        
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    
    }

8 Respostas

T

Tenta assim.

private void botaoInicioPararActionPerformed(java.awt.event.ActionEvent evt) {

new Thread() {

<a class="mention" href="/u/override">@Override</a>

public void run() {

Time j= new Time();

Thread th= new Thread(j);

th.start();

}
}.start();
           
}
JoseDev13

Tem um jeito mais simples!

Bom, se essa explicação não adiantar muito, me avise que te mando melhor, é por que estou meio sem tempo agora!

Bom, Na classe Timer do pacote swing tem o metodo start(); stop(); e restart(); e mais alguns

No construtor vai pedir uma int como parâmetro, mas isso é pelo tempo do timer!

Eu prefiro usar a propria classe TImer mesmo!

Se quiser Iniciar o timer, use (nome Do Timer) .start();

Se quiser parar o timer, use  (nome do Timer) .stop();

se quiser reinciar o timer, use(nome do Timer).restart();

Espero ter ajudado =]
M

Não funcionou cara… Deu muitos erros e nem compilou

M

Bom ainda sou bem leigo em java ainda, você poderia me explicar melhor como seria esse construtor, se puder?

M

Mas acredito que o problema não seja no método e sim na forma como estou apresentando na JLabel!

JoseDev13

Olá, Bom, È um prazer ajudar :smiley:
Hoje, depois que chegar da aula, vou ver se da tempo de te mandar o link no mediafire do timer que estou fazendo, ou o codigo aqui, é por que hoje tem provas pra mim hehehe, Mas vou te mandar Hoje a noite :smiley:

staroski

Pôxa, galera dando muitos palpites na base da tentativa e erro e nenhum apontando o real problema…

Sua classe Principal instancia uma Thread que executa a classe Time.
Só que sua classe Time cria outra instância da classe Principal e está atualizando o JLabel dessa outra intância.

JoseDev13
Solucao aceita

Là VAI BOMBA!!!
Se tiver algum erro, me avise, não deu tempo de revisar tudo :smiley:

package main;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.Timer;

import javax.swing.border.EmptyBorder;

import javax.swing.JLabel;

import javax.swing.JButton;

import java.awt.Font;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

public class Main extends JFrame {

private static final long serialVersionUID = 1L;

private JPanel contentPane;
private final JLabel lblHoras = new JLabel("00:");
private JLabel lblMinutos;
private JLabel lblSegundos;
private boolean reiniciar = false;
private JButton btnParar;
private boolean clear = false;
private int ih = 0;
private int im = 0;
private int is = 0;

public static void main(String[] args) {
	try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("GTK+".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
    }//isso é so para o look and feel, não tem necessidade de usar, eu trabalho com mint e acho esse mais bonito! :D
	new Main().setVisible(true);
}

private Timer segundos = new Timer(1000,new ActionListener() {
	@Override
	public void actionPerformed(ActionEvent e) {
		is++;//ou, dependendo de que parte do aprendizado você está, i = i+1;
		lblSegundos.setText(is + "");
		if(is==60)
		{
			is = 0;
		}
	}
});

private Timer minutos = new Timer(60000,new ActionListener() {
	@Override
	public void actionPerformed(ActionEvent e) {
		im++;
		lblMinutos.setText(im + ":");
		if(im==60)
		{
			im = 0;
		}
	}
});

private Timer horas = new Timer(600000,new ActionListener() {
	@Override
	public void actionPerformed(ActionEvent e) {
		ih++;
		lblHoras.setText(ih+ ":");
		if(clear==true)
		{
			ih = 0;
			clear = false;
		}
	}
});

public Main() {
	
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setBounds(100, 100, 261, 302);
	contentPane = new JPanel();
	contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
	contentPane.setLayout(null);
	setContentPane(contentPane);
	lblHoras.setFont(new Font("Dialog", Font.BOLD, 14));
	lblHoras.setBounds(86, 100, 26, 49);
	contentPane.add(lblHoras);
	
	JButton btnComear = new JButton("Começar");
	btnComear.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			btnParar.setEnabled(true);
			if(reiniciar==false)
			{
				reiniciar = true;
				segundos.start();
				horas.start();
				minutos.start();
			}else 
			{
				segundos.restart();
				horas.restart();
				minutos.restart();
			}
			btnComear.setEnabled(false);
		}
	});
	btnComear.setBounds(12, 230, 117, 25);
	contentPane.add(btnComear);
	
	btnParar = new JButton("Parar");
	btnParar.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			clear = true;
			btnComear.setText("Reiniciar");
			segundos.stop();
			horas.stop();
			minutos.stop();
			btnParar.setEnabled(false);
			btnComear.setEnabled(true);
			ih = 0;
			is = 0;
			im = 0;
		}
	});
	btnParar.setEnabled(false);
	btnParar.setBounds(125, 230, 117, 25);
	contentPane.add(btnParar);
	
	lblMinutos = new JLabel("00:");
	lblMinutos.setFont(new Font("Dialog", Font.BOLD, 14));
	lblMinutos.setBounds(124, 100, 26, 49);
	contentPane.add(lblMinutos);
	
	lblSegundos = new JLabel("00");
	lblSegundos.setFont(new Font("Dialog", Font.BOLD, 14));
	lblSegundos.setBounds(157, 100, 26, 49);
	contentPane.add(lblSegundos);
}

}

Criado 2 de dezembro de 2016
Ultima resposta 5 de dez. de 2016
Respostas 8
Participantes 4