Busco función que espere tiempo para hacer una cuenta-atrás

Iniciado por Wargolth, 7 Noviembre 2008, 18:03 PM

0 Miembros y 1 Visitante están viendo este tema.

Wargolth

Hola muy buenas,

Java no es mi mejor aliado  porque aún no lo controlo muy bien y añadido a esto no consigo sacar lo que quiero de la documentación.

Existe alguna función de java que espere durante un tiempo? Encontré una que se llama sleep aplicada a los "Threads". Ni idea de lo que son. En fin, quería hacer un bucle que a cada ciclo esperase 1 segundo y luego cambiase en un label el tiempo que queda -> cuenta atrás.

Gracias por vuestra, ya busqué pero hasta ahora no pude encontrar nada,
Wargolth

-Ramc-

#1
Thread.sleep(milisegundos);

pones 1000 milisegundos para un segundo.

PD: Debes capturar una InterruptedException.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Wargolth

Thread.sleep(1000);

Este código por ejemplo no me lo acepta. Me lo marca como algo desconocido. Sin embargo en la post-data, a qué te refieres exactamente?

Wargolth

sapito169


Wargolth

Sobrepasa mi nivel lo que me estáis diciendo. Pero creo que podré llegar a entenderlo. Conozco la estructura de try catch pero no sé cómo hacer lo que me decís. Esto es lo que intenté y no salió bien:

Citarprivate void b_comezar_actionPerformed(ActionEvent e) {
        long a = Long.parseLong(ta_numero.getText());
        catch (Exception l) {
            for (int i=1; i<=a; i++) {
                l_resultado.setText((String) (a-i);
                Thread.sleep(1000);
            }
        }
   
    }

Cuando pulso el botón me gustaría que fuese desde el número que le paso a través de un textbox hasta 0 esperando a cada ciclo 1 segundo. Alguna idea?

Gracias

-Ramc-

Código (java) [Seleccionar]
private void b_comezar_actionPerformed(ActionEvent e) {
        long a = Long.parseLong(ta_numero.getText());
        try {
            for (int i=1; i<=a; i++) {
                l_resultado.setText((String) (a-i);
                Thread.sleep(1000);
            }
        } catch(InterruptedException e) {
                  //Que haras cuando te de error
        }
}

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Wargolth

Parece que funciona "en esencia". Muchas gracias por la adaptación. Lo que pasa que sigo sin captar exactamente lo que hace la función sleep y quién es Thread. Supongo que sabiendo eso se explicaría el porqué se bloquea completamente el programa mientras espera y el porqué de que no me muestre los números intermedios a cada ciclo del bucle. He puesto una instrucción más para ver qué pasaba y para mi sorpresa la ejecuta sin problema. Este es el código:

Código (java) [Seleccionar]
    private void b_comezar_actionPerformed(ActionEvent e) {
        int a = Integer.parseInt(ta_numero.getText());
        try {           
            for (int i=1; i<=a; i++) {
                 l_resultado.setText((a-i)+" ");
                 Thread.sleep(1000);           
            }
            l_resultado.setText("Se acabó");
        } catch(InterruptedException b) {
             l_resultado.setText("Hubo un error muy gordo");
        }
    }

Wargolth

Perdón, me olvidaba de lo que quería preguntar.

1. ¿Porqué se bloquea el programa?
2. ¿Porqué se bloquea durante 10 segundos si le doy como entrada 10 en vez de hacerlo por bloques de 1 segundo en 1 segundo?
3. ¿Por que no muestra a cada etapa en la label el número tal como le ordeno?

Gracias por adelantado!

-Ramc-

Thread es una clase que se encarga de controlar hilos de ejecución, sleep es un método de la clase Thread que hace una pausa en un hilo de ejecución, es un método estatico(declarado como static), por lo que se llama directamente de Thread, sin instanciar la clase, por eso llamamos al método como Thread.sleep(); que recibe los milisegundos de pausa y pausa el hilo actual en ejecución. por eso te da una pausa cuando lo colocas.
Citar
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Wargolth

Genial explicado, gracias. Qué hay con respecto a estas irregularidades que me causa. Con el último código que puse el programa hace lo siguiente:

> Introuzco mi número, pulso en aceptar y después en Comenzar
(la label muestra ahora el número que introduje en mi TextBox)
> El programa espera diez segundos completamente colgado y muestra en la label "se acabó".

Cita de: Wargolth
1. ¿Porqué se bloquea el programa?
2. ¿Porqué se bloquea durante 10 segundos si le doy como entrada 10 en vez de hacerlo por bloques de 1 segundo en 1 segundo?
3. ¿Por que no muestra a cada etapa en la label el número tal como le ordeno?