Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Wargolth en 7 Noviembre 2008, 18:03 pm



Título: Busco función que espere tiempo para hacer una cuenta-atrás
Publicado por: Wargolth en 7 Noviembre 2008, 18:03 pm
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


Título: Re: Busco función que espere tiempo para hacer una cuenta-atrás
Publicado por: -Ramc- en 7 Noviembre 2008, 18:05 pm
Código:
Thread.sleep(milisegundos);

pones 1000 milisegundos para un segundo.

PD: Debes capturar una InterruptedException.


Título: Re: Busco función que espere tiempo para hacer una cuenta-atrás
Publicado por: Wargolth en 8 Noviembre 2008, 10:09 am
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


Título: Re: Busco función que espere tiempo para hacer una cuenta-atrás
Publicado por: sapito169 en 8 Noviembre 2008, 14:40 pm
ese codigo deve estar dentro de una excepción


Título: Re: Busco función que espere tiempo para hacer una cuenta-atrás
Publicado por: Wargolth en 8 Noviembre 2008, 18:29 pm
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:

Citar
private 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


Título: Re: Busco función que espere tiempo para hacer una cuenta-atrás
Publicado por: -Ramc- en 8 Noviembre 2008, 18:52 pm
Código
  1. private void b_comezar_actionPerformed(ActionEvent e) {
  2.        long a = Long.parseLong(ta_numero.getText());
  3.        try {
  4.            for (int i=1; i<=a; i++) {
  5.                l_resultado.setText((String) (a-i);
  6.                Thread.sleep(1000);
  7.            }
  8.        } catch(InterruptedException e) {
  9.                  //Que haras cuando te de error
  10.        }
  11. }


Título: Re: Busco función que espere tiempo para hacer una cuenta-atrás
Publicado por: Wargolth en 8 Noviembre 2008, 19:27 pm
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
  1.    private void b_comezar_actionPerformed(ActionEvent e) {
  2.        int a = Integer.parseInt(ta_numero.getText());
  3.        try {            
  4.            for (int i=1; i<=a; i++) {
  5.                 l_resultado.setText((a-i)+" ");
  6.                 Thread.sleep(1000);            
  7.            }
  8.            l_resultado.setText("Se acabó");
  9.        } catch(InterruptedException b) {
  10.             l_resultado.setText("Hubo un error muy gordo");
  11.        }
  12.    }


Título: Re: Busco función que espere tiempo para hacer una cuenta-atrás
Publicado por: Wargolth en 8 Noviembre 2008, 19:32 pm
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!


Título: Re: Busco función que espere tiempo para hacer una cuenta-atrás
Publicado por: -Ramc- en 8 Noviembre 2008, 19:33 pm
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.


Título: Re: Busco función que espere tiempo para hacer una cuenta-atrás
Publicado por: Wargolth en 8 Noviembre 2008, 19:52 pm
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?