Problema com Cronometro Regressivo no Jlabel

Olá pessoal.

Estou resolvendo uma lista de exercícios de POOII e me deparei com um problema realmente estranho que foge do meu conhecimento.
Estou tentando criar um projeto que simula um microondas usando Jlabel. Estou com 2 problemas mas o mais relevante é o do cronometro. Se eu coloco, por exemplo, para ele ligar por 5 segundos, ele deveria mostrar no “display” o tempo diminuindo até 0 e com a opção de parar no meio do processo.

Problema: Enquanto o tempo roda, toda a interface gráfica fica “travada”, o cronometro não funciona e os botões também não funcionam, no entanto a interface gráfica volta a funcionar quando o tempo acaba, por exemplo, se eu coloco 5 segundos a interface fica travada por exatos 5 segundos e depois volta ao normal.

Podem me ajudar? Vou deixar em anexo o projeto com as classes aqui no post (uso o netBeans). Obrigado.
Exercício 11.zip (44.5 KB)

Onde você está setando tempo para ele ser diferente de 0?

while(tempo != 0

Ele está travando porque está em loop infinito

Na verdade eu duvido muito que o erro seja esse porque o que “Trava” que eu disse é o próprio Jlabel, como eu disse, se eu adicionar 5 segundos ao display, 5 segundos depois ele zera normalmente. Preciso de uma possível solução para o travamento do Jlabel, lí em alguns tópicos que tem algo haver com os processos enviados ao processador. Não entendi porque, por isso criei esse tópico.

Ja percebeu que sem o while, ao clicar em start é decrementado 1 do cronometro do JLabel. Parece que você vai ter que tratar melhor a classe Thread, pode ser que o sleep esteja tambem travando no 1000/ 1 segundo quando é executado o evento do clique. É como se o botão ficasse esperando o sleep terminar para voltar ao estado normal (de clicavel). \na verdade o que seria normal tambem ele ficar desativado, mas o que o está desativando é esse sleep

Entendo… Então qual seria a solução? A única maneira de criar um cronômetro que eu conheço é essa.