Como faço para um cronometro que retrocede parar?

Olá… bem, eu to fazendo um cronometro que retrossede, mas o problemas é que
eu não sei fazer ele para quando a hora, os minutos e os segundo atingirem zero.
Alguém poderia me ajudar?

Esse é o código da tela principal do cronometro.

public class TelaMain extends javax.swing.JFrame {

    private static int s = 0;
    private static int m = 0;
    private static int h = 0;
    boolean estado = true;
    private int mpx = 0;
    private int mpy = 0;
    static Cronometro c = new Cronometro();

    public TelaMain() {
        initComponents();
        parar.setEnabled(!estado);
        resetar.setEnabled(!estado);

    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel2 = new javax.swing.JPanel();
        exit = new javax.swing.JLabel();
        JLabel1 = new javax.swing.JLabel();
        mini1 = new javax.swing.JButton();
        jPanel3 = new javax.swing.JPanel();
        tabela = new javax.swing.JButton();
        sortear = new javax.swing.JButton();
        lb3 = new javax.swing.JLabel();
        lb1 = new javax.swing.JLabel();
        lb2 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        resetar = new javax.swing.JButton();
        parar = new javax.swing.JButton();
        iniciar = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jButton2 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setUndecorated(true);
        setResizable(false);

        jPanel2.setBackground(new java.awt.Color(0, 153, 0));
        jPanel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(3, 115, 3)));
        jPanel2.setMinimumSize(new java.awt.Dimension(1000, 35));
        jPanel2.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent evt) {
                jPanel2MouseDragged(evt);
            }
        });
        jPanel2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jPanel2MousePressed(evt);
            }
        });

        exit.setFont(new java.awt.Font("Arial Black", 0, 24)); // NOI18N
        exit.setForeground(new java.awt.Color(240, 240, 240));
        exit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/close.png"))); // NOI18N
        exit.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        exit.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                exitMouseClicked(evt);
            }
        });

        JLabel1.setFont(new java.awt.Font("Agency FB", 0, 24)); // NOI18N
        JLabel1.setText("CronometroANM");

        mini1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/minimize.png"))); // NOI18N
        mini1.setContentAreaFilled(false);
        mini1.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        mini1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mini1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(JLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 796, Short.MAX_VALUE)
                .addComponent(mini1, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(exit, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(exit, javax.swing.GroupLayout.DEFAULT_SIZE, 36, Short.MAX_VALUE)
            .addComponent(JLabel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(mini1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
        );

        getContentPane().add(jPanel2, java.awt.BorderLayout.PAGE_START);

        jPanel3.setBackground(new java.awt.Color(255, 255, 255));
        jPanel3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(3, 115, 3)));

        tabela.setBackground(new java.awt.Color(0, 153, 0));
        tabela.setFont(new java.awt.Font("Arial", 0, 24)); // NOI18N
        tabela.setText("PROJETOS");
        tabela.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        tabela.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tabelaActionPerformed(evt);
            }
        });

        sortear.setBackground(new java.awt.Color(0, 153, 0));
        sortear.setFont(new java.awt.Font("Arial", 0, 24)); // NOI18N
        sortear.setText("SORTEAR");
        sortear.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        sortear.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                sortearActionPerformed(evt);
            }
        });

        lb3.setFont(new java.awt.Font("Agency FB", 0, 102)); // NOI18N
        lb3.setText("00");

        lb1.setFont(new java.awt.Font("Agency FB", 0, 102)); // NOI18N
        lb1.setText("00");

        lb2.setFont(new java.awt.Font("Agency FB", 0, 102)); // NOI18N
        lb2.setText("00");

        jLabel4.setFont(new java.awt.Font("Agency FB", 0, 102)); // NOI18N
        jLabel4.setText(":");

        jLabel5.setFont(new java.awt.Font("Agency FB", 0, 102)); // NOI18N
        jLabel5.setText(":");

        resetar.setBackground(new java.awt.Color(0, 153, 0));
        resetar.setFont(new java.awt.Font("Arial", 0, 11)); // NOI18N
        resetar.setText("RESETAR");
        resetar.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        resetar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                resetarActionPerformed(evt);
            }
        });

        parar.setBackground(new java.awt.Color(0, 153, 0));
        parar.setFont(new java.awt.Font("Arial", 0, 11)); // NOI18N
        parar.setText("PARAR");
        parar.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        parar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pararActionPerformed(evt);
            }
        });

        iniciar.setBackground(new java.awt.Color(0, 153, 0));
        iniciar.setFont(new java.awt.Font("Arial", 0, 11)); // NOI18N
        iniciar.setText("INICIAR");
        iniciar.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        iniciar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                iniciarActionPerformed(evt);
            }
        });

        jLabel1.setBackground(new java.awt.Color(204, 204, 204));
        jLabel1.setFont(new java.awt.Font("Agency FB", 0, 24)); // NOI18N
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(240, 240, 240)));
        jLabel1.setMinimumSize(new java.awt.Dimension(73, 35));
        jLabel1.setOpaque(true);
        jLabel1.setPreferredSize(new java.awt.Dimension(73, 35));

        jButton2.setBackground(new java.awt.Color(255, 255, 255));
        jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/document (3).png"))); // NOI18N
        jButton2.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        jButton2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton2MouseClicked(evt);
            }
        });
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap(242, Short.MAX_VALUE)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                        .addComponent(sortear, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(113, 113, 113)
                        .addComponent(tabela, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(250, 250, 250))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                        .addComponent(lb1)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel4)
                        .addGap(18, 18, 18)
                        .addComponent(lb2)
                        .addGap(12, 12, 12)
                        .addComponent(jLabel5)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(lb3)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(283, 283, 283))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                        .addComponent(iniciar)
                        .addGap(37, 37, 37)
                        .addComponent(parar, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(34, 34, 34)
                        .addComponent(resetar)
                        .addGap(344, 344, 344))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 518, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(238, 238, 238))))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addGap(122, 122, 122)
                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lb3)
                            .addComponent(jLabel5)
                            .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel4)
                                .addComponent(lb1)
                                .addComponent(lb2))))
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addGap(196, 196, 196)
                        .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(resetar)
                    .addComponent(parar)
                    .addComponent(iniciar))
                .addGap(27, 27, 27)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 35, Short.MAX_VALUE)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(sortear, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tabela, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(108, 108, 108))
        );

        getContentPane().add(jPanel3, java.awt.BorderLayout.CENTER);

        setSize(new java.awt.Dimension(1000, 600));
        setLocationRelativeTo(null);
    }// </editor-fold>                        

    private void tabelaActionPerformed(java.awt.event.ActionEvent evt) {                                       
        // TODO add your handling code here:
        Tabela tela2 = new Tabela();
        tela2.setVisible(true);
    }                                      

    private void sortearActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
    }                                       

    private void resetarActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        estado = true;
        s = 0;
        m = 0;
        h = 0;

        lb1.setText("00");
        lb2.setText("00");
        lb3.setText("00");
        resetar.setEnabled(!estado);

    }                                       

    private void iniciarActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        estado = true;
        if (estado == true) {
            resetar.setEnabled(!estado);
        }
        iniciar.setEnabled(!estado);
        parar.setEnabled(estado);

        Thread hilo;
        hilo = new Thread() {
            @Override
            public void run() {

                for (;;) {
                    if (estado == true) {
                        try {
                            sleep(100);

                            if (s <= 0) {
                                s = 59;
                                m--;
                            }

                            if (m <= 0) {
                                s = 59;
                                m = 59;
                                h--;
                            }
                            if (m == 00) {
                                h = 00;
                                m = 00;
                                s--;
                                    if (s == 1) {
                                    break;
                                }
                            }
                            if (Integer.valueOf(lb1.getText()) == 0 && Integer.valueOf(lb2.getText()) == 0 && Integer.valueOf(lb3.getText()) == 0) {
                                break;
                            }
                            //FORMATAÇÃO
                            if (h <= 9) {
                                lb1.setText("0" + h);
                            } else {
                                lb1.setText("" + h);
                            }

                            if (m <= 9) {
                                lb2.setText("0" + m);
                            } else {
                                lb2.setText("" + m);
                            }

                            if (s <= 9) {
                                lb3.setText("0" + s);
                            } else {
                                lb3.setText("" + s);
                            }
                            s--;

                        } catch (InterruptedException e) {

                        }
                    } else {
                        break;
                    }
                }
            }
        };
        hilo.start();
    }

Você já tem sua resposta aqui. É uma condição: ele deve PARAR quando ZERAR. Pense em condicionais e boa.

FearX eu fiz essa condição.

Condição:

if (h == 0 && m == 0 && s == ) 
{
   break;
}

Mas o programa parece não olhar essa condição e ai quando ele chega a 00:01:01 ele exibe 0-1:59:59

Volskyai
Estou com o mesmo problema, já resolveu?
Obgdo

Em que parte do código esse trecho se encontra?

Você postou o código incompleto, ele nem compila.

Mas vi que você importa uma classe Cronometro, como você implementou essa classe? Ela não tem um método para parar a contagem?

Certa vez eu fiz algo assim, criei uma interface listener para receber notificações de cada “tic-tac” de meu cronometro:

public interface CronometroListener {

    public void onTicTac(Cronometro cronometro);
}

Eu também criei uma classe que representa o cronômetro em si e que permite que um listener seja registrado através do método setListener:

public class Cronometro {

    // cria um cronômetro para contagem crescente
    public static Cronometro crescente(int horaFinal, int minutoFinal, int segundoFinal) {
        Cronometro cronometro = new Cronometro();
        cronometro.horaAtual = 0;
        cronometro.minutoAtual = 0;
        cronometro.segundoAtual = 0;
        cronometro.horaLimite = horaFinal;
        cronometro.minutoLimite = minutoFinal;
        cronometro.segundoLimite = segundoFinal;
        cronometro.incremento = +1;
        return cronometro;
    }

    // cria um cronômetro para contagem decrescente
    public static Cronometro decrescente(int horaInicial, int minutoInicial, int segundoInicial) {
        Cronometro cronometro = new Cronometro();
        cronometro.horaAtual = horaInicial;
        cronometro.minutoAtual = minutoInicial;
        cronometro.segundoAtual = segundoInicial;
        cronometro.horaLimite = 0;
        cronometro.minutoLimite = 0;
        cronometro.segundoLimite = 0;
        cronometro.incremento = -1;
        return cronometro;
    }

    private int horaAtual;
    private int minutoAtual;
    private int segundoAtual;

    private int horaLimite;
    private int minutoLimite;
    private int segundoLimite;

    private int incremento;

    private boolean contando;

    private CronometroListener listener;

    // construtor privado, essa classe é instanciada pelos métodos crescente ou decrescente
    private Cronometro() {}

    public void iniciar() {
        if (!contando) {
            contando = true;
            new Thread(() -> contar()).start();
        }
    }

    public void parar() {
        contando = false;
    }

    public boolean contando() {
        return contando;
    }

    public int getHora() {
        return horaAtual;
    }

    public int getMinuto() {
        return minutoAtual;
    }

    public int getSegundo() {
        return segundoAtual;
    }

    public void setListener(CronometroListener listener) {
        this.listener = listener;
    }

    @Override
    public String toString() {
        return String.format("%02d:%02d:%02d", horaAtual, minutoAtual, segundoAtual);
    }

    private void contar() {
        while (contando) {
            try {
                ticTac();
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private synchronized void ticTac() {
        if (listener != null) {
            listener.onTicTac(this);
        }
        if (horaAtual == horaLimite && minutoAtual == minutoLimite && segundoAtual == segundoLimite) {
            contando = false;
            return;
        }

        segundoAtual += incremento;
        if (segundoAtual > 59) {
            segundoAtual = 0;
            minutoAtual += incremento;
        } else if (segundoAtual < 0) {
            segundoAtual = 59;
            minutoAtual += incremento;
        }

        if (minutoAtual > 59) {
            minutoAtual = 0;
            horaAtual += incremento;
        } else if (minutoAtual < 0) {
            minutoAtual = 59;
            horaAtual += incremento;
        }

        if (horaAtual > 23) {
            horaAtual = 0;
        } else if (horaAtual < 0) {
            horaAtual = 23;
        }
    }
}

E aí era bem simples utilizar ele, veja:

public class Exemplo {

    public static void main(String[] args) {
        try {
            Exemplo programa = new Exemplo();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public void executar() throws Exception {
        // vai iniciar em 01:13:45 e parar quando chegar em 00:00:00
        Cronometro cronometroDecrescente = Cronometro.decrescente(1, 13, 45);
        cronometroDecrescente.setListener(cronometro -> System.out.println(cronometro));
        cronometroDecrescente.iniciar();
    }
}

Obviamente ele também é possível utilizá-lo em uma janela gráfica, veja:

import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;

@SuppressWarnings("serial")
public class TelaCronometro extends JFrame {

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            TelaCronometro tela = new TelaCronometro();
            tela.setDefaultCloseOperation(EXIT_ON_CLOSE);
            tela.setLocationRelativeTo(null);
            tela.setVisible(true);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    private JTextField textFieldHora;

    private Cronometro cronometro;

    TelaCronometro() {
        super("Cronômetro");
        Dimension tamanho = new Dimension(400, 120);
        setSize(tamanho);
        setMinimumSize(tamanho);
        setResizable(false);

        cronometro = Cronometro.decrescente(1, 0, 0);
        cronometro.setListener(objeto -> atualizarTextField(objeto));

        textFieldHora = new JTextField();
        textFieldHora.setPreferredSize(new Dimension(100, 35));
        textFieldHora.setHorizontalAlignment(SwingConstants.CENTER);
        textFieldHora.setEditable(false);

        JButton buttonIniciar = new JButton("Iniciar");
        buttonIniciar.setPreferredSize(new Dimension(100, 35));
        buttonIniciar.addActionListener(event -> iniciar());

        JButton buttonParar = new JButton("Parar");
        buttonParar.setPreferredSize(new Dimension(100, 35));
        buttonParar.addActionListener(event -> parar());

        Container container = getContentPane();
        container.setLayout(new FlowLayout(FlowLayout.CENTER));

        container.add(textFieldHora);
        container.add(buttonIniciar);
        container.add(buttonParar);
    }

    private void iniciar() {
        cronometro.iniciar();
    }

    private void parar() {
        cronometro.parar();
    }

    private void atualizarTextField(Cronometro cronometro) {
        textFieldHora.setText(String.valueOf(cronometro));
    }
}

Sim, eu usei essa lógica.

Código:

Thread hilo;
hilo = new Thread() {
@Override
public void run() {

            for (;;) {
                if (estado == true) {
                    try {
                        sleep(16);
                        
                        if (ms < 0) {
                            ms = 59;
                            s--;
                            System.out.println("" + ms);

                        }

                        if (s < 0) {
                            ms = 59;
                            s = 59;
                            m--;
                            System.out.println("" + s);
                        }

                        if (m < 0) {
                            ms = 59;
                            s = 59;
                            m = 59;
                            h--;
                            System.out.println("" + m);
                            System.out.println("" + h);
                        }

                        if (Integer.valueOf(lb1.getText()) == 0 && Integer.valueOf(lb2.getText()) == 0 && Integer.valueOf(lb3.getText()) == 0) {
                            break;
                        }
                        //FORMATAÇÃO
                        if (h <= 9) {
                            lb1.setText("0" + h);
                        } else {
                            lb1.setText("" + h);
                        }

                        if (m <= 9) {
                            lb2.setText("0" + m);
                        } else {
                            lb2.setText("" + m);
                        }

                        if (s <= 9) {
                            lb3.setText("0" + s);
                        } else {
                            lb3.setText("" + s);
                        }
                        ms--;

                    } catch (InterruptedException e) {

                    }
                } else {
                    break;
                }
            }
        }
    };
    hilo.start();
}

ms == milisegundos
s == segundo
m == minutos
h == horas

Ué, mas você pôs essa lógica diretamente no código da sua tela?
Então o que serve a classe Cronometro que você instancia?
Seus segundos só tem 60 milissegundos, deveriam ser 1000.