Thread + Timer

Pessoal, não tenho conhecimento em Thread e em Timer mas consegui criar esses dois métodos porém está com um erro e não consigo resolver, a idéia é o seguinte: um classe manda uma jlabel para o método mostraLabel e ele chama o outro método desizaLabel os dois metodos abaixo vai apresentar a mensagem durante 3 segundos e dois deslizar para sair da tela.

Sei que tem um erro no loop do metodo deslizaLabel pois ele esta com loop infinito mas não consigo tirar… quero que ao jlabel deslizar até o fim do form ele finalize o Thread.

e também se alguém tiver alguma sugestão de como otimizar esse processo será bem vindo.

public void mostraLabel(JLabel lbl) {
        ActionListener action = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                tempo.stop();
                deslizaLabel(lbl);
            }
        };
        tempo = new Timer(3000, action);
        tempo.start();
    }

private void deslizaLabel(JLabel lbl){
    new Thread(){
        @Override
        public void run(){
            int x = 0;
            int y = lbl.getLocation().y;
            while(true){
                x++;
                if(x > lbl.getWidth()){
                    this.stop();
                }
                lbl.setLocation(x,y);
                try {
                    sleep(10);
                } catch (InterruptedException ex) {  }
            }
        }
    }.start();}

Conforme a documentação, você não deveria chamar o método stop de um objeto Thread.

Assim deve resolver:

private void deslizaLabel(JLabel lbl){
    new Thread(){
        @Override
        public void run(){
            int x = 0;
            int y = lbl.getLocation().y;
            while (true) {
                x++;
                if(x > lbl.getWidth()){
                    break;
                }
                lbl.setLocation(x,y);
                try {
                    sleep(10);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }.start();
}

Obrigado pela ajuda staroski, funcionou porém apenas na primeria execução, qdo os metodos são chamados novamente após um tempo ele demora um pouco para iniciar o que pode ser?

Sem ver o código completo de todas as classes envolvidas, fica difícil indicar a causa da lentidão.