Hacer un simple programador en Java

Me parece que no puede averiguar cómo hacer que un simple programador en java. Todo lo que necesitas hacer es simplemente mostrar la hora, la verdad. Tan sólo un método de inicio, y sigue contando como 0:00, 0:01, 0:02, etc. He visto algún otro similar posts en el foro sobre esto, pero todo el código es bastante complicado para mi nivel de comprensión; soy un poco nuevo para java. Pero no debería ser tan difícil hacer un temporizador que sólo se realizan una función básica? Si alguien pudiera ayudar se agradecería mucho 🙂

  • Un temporizador con una pantalla implicaría roscado. Si eres nuevo en Java, y tal vez de la programación en general, yo recomiendo el aprendizaje más simples cosas primero antes de sumergirse en las operaciones de roscado.
  • Un temporizador no necesariamente implican las operaciones de roscado. Si usted ya tiene un bucle de eventos, el mismo bucle existente puede ser utilizado. Si el programa es un comando de línea de teletipo programa del estilo, a continuación, el primer plano (principal) hilo podría trabajar lo suficiente. Y, si usted tiene una interfaz gráfica de usuario del programa, sólo es necesario asegurarse de que la pantalla se actualiza más a menudo de lo que el usuario ve, y que se podría realizar mediante una interfaz gráfica de usuario temporizador de capacidad. Usted no debe asumir que el roscado es necesario.
InformationsquelleAutor Nadim | 2012-05-30

3 Kommentare

  1. 22

    Esto no es difícil. Sin embargo, me gustaría advertir a usted que he visto algunos muy confundido respuestas en stack overflow, en algunos casos sorprendentemente buenos hábitos de programación, así que mucho cuidado. En primer lugar, permítanme responder a la pregunta.

    Si parece que el error más grande que los programadores hacen en la implementación de un temporizador, es pensar que se necesita algo para mantener un seguimiento de la hora actual. Es decir, que escribir algún tipo de bucle que se incrementa una variable cada segundo, o alguna tontería. Usted no necesita escribir código para mantener un registro del tiempo. La función System.currentTimeMillis() hará eso para usted, y lo hace con bastante precisión.

    Temporizador de código se involucran dos aspectos que muchos programadores mezclar:

    1. cálculo del tiempo
    2. actualización de la pantalla

    Todo lo que usted necesita hacer para calcular el tiempo para mostrar, es la de registrar el tiempo que el temporizador inicia:

    long startTime = System.currentTimeMillis();

    Más tarde, cuando se quiere mostrar la cantidad de tiempo, sólo resta este de la hora actual.

    long elapsedTime = System.currentTimeMillis() - startTime;
    long elapsedSeconds = elapsedTime / 1000;
    long secondsDisplay = elapsedSeconds % 60;
    long elapsedMinutes = elapsedSeconds / 60;
    //put here code to format and display the values

    El error más grande que los programadores cometen es pensar que necesitamos una variable para almacenar la hora actual y, a continuación, escribir código para incrementar esa variable en cada segundo, por ejemplo, algo que se llama «elapsedSeconds» que mantienen. El problema es que se puede programar código para ser llamado a cada segundo, pero no hay ninguna garantía de exactitud el momento en que el código será llamado. Si el sistema está ocupado, ya que el código podría ser llamado un poco más tarde que el segundo. Si el sistema está muy ocupado (por ejemplo la página de recuperación de una falla de disco) que en realidad podría ser de varios segundos de retraso. El código que usa el Hilo.sleep(1000) función de bucle cada segundo se encuentra que el error se acumula con el tiempo. Si el sueño devuelve 300ms finales de una vez, que el error se agrava en el cálculo de qué hora es. Todo esto es completamente innecesario, ya que el OS tiene una función para decirle la hora actual.

    El cálculo anterior será precisa si se ejecuta este código cada segundo, 100 veces por segundo, o una vez cada 3.572 segundos. El punto es que currentTimeMillis() es la representación exacta de el tiempo, independientemente de cuando este código se llama … y que es una consideración importante, porque el hilo y eventos de temporizador no garantiza que sea exacta en un momento específico.

    El segundo aspecto de un temporizador de actualización de la pantalla. Esto dependerá de la tecnología que se utiliza para mostrar con. En un entorno GUI es necesario programar los eventos de dibujo. Te gustaría que estos pintura eventos a venir a la derecha después de que el tiempo que la pantalla se espera a cambio. Sin embargo, es complicado. Usted puede solicitar un evento paint, pero no puede ser de cientos de otros eventos de dibujo en la cola para ser manejado antes que el tuyo.

    Una forma perezosa de hacer esto es con horario de 10 de la pintura de eventos por segundo. Debido a que el cálculo del tiempo no depende del código que se está llamando a un punto particular en el tiempo, y debido a que no importa si usted volver a pintar la pantalla con el mismo tiempo, este enfoque más o menos garantías que el tiempo mostrado mostrará el momento adecuado dentro de alrededor de 1/10 de segundo. Esto parece un desperdicio, porque 9 de cada 10 veces que va a pintar lo que ya está en la pantalla.

    Si usted está escribiendo un programa con animación de algún tipo (como un juego) que es el refresco de la pantalla de 30 veces por segundo, entonces usted no necesita hacer nada. Acaba de incorporar a la pantalla del temporizador de llamada en tu regulares de actualización de la pantalla.

    Si la pintura eventos son caros, o si usted está escribiendo un programa que hace de terminal de salida de estilo, usted puede optimizar la programación de los eventos mediante el cálculo de la cantidad de tiempo restante hasta que la pantalla va a cambiar:

    long elapsedTime = System.currentTimeMillis() - startTime;
    long timeTillNextDisplayChange = 1000 - (elapsedTime % 1000);

    La variable timeTillNextDisplayChange contiene el número de milisegundos que debe esperar hasta que la parte de segundos del temporizador cambiará. A continuación, puede programar una pintura evento que se produzca en ese momento, posiblemente llamada Thread.sleep(timeTillNextDisplayChange) y después de que el sueño de hacer la salida. Si el código se ejecuta en un navegador, puede utilizar esta técnica para la actualización de la página DOM en el momento adecuado.

    Nota, que no hay nada en este cálculo de la actualización de la pantalla de que los efectos de la precisión del temporizador de sí mismo. El hilo podría regresar del sueño 10 ms tarde, o incluso 500ms tarde, y la precisión del temporizador no se verá afectado. A cada paso se calcula el tiempo de espera de la currentTimeMillis, por lo que de ser llamados tarde en una ocasión no provocar más adelante muestra a ser tarde.

    Que es la clave para una precisa temporizador. No espere que el sistema operativo para que llame a su rutina o enviar el evento paint exactamente cuando se lo pidan. Normalmente, por supuesto, con máquinas modernas, el sistema operativo es muy sensible y precisa. Esto ocurre en situaciones de prueba donde no se ejecuta mucho más, y el temporizador parece funcionar. Pero, en producción, en raras situaciones de estrés, usted no desea que el temporizador de «a la deriva», porque el sistema está ocupado.

  2. 0

    Puede utilizar Timer clase de java.util o de otra manera, que es más complicado, es con los Hilos. El temporizador también ha hilo de la acción, pero es bastante fácil de entender para usarlo.

  3. 0

    Para la creación de un simple temporizador como se explicó como por su necesidad , es muy fácil escribir un código para eso. He escrito el código a continuación para su referencia. Si usted lo desea puede mejorar.

    importar java.util.concurrente.TimeUnit;
    clase pública PerfectTimer {

    public static void main(String[] args) throws InterruptedException 
    {
        boolean x=true;
        long displayMinutes=0;
        long starttime=System.currentTimeMillis();
        System.out.println("Timer:");
        while(x)
        {
            TimeUnit.SECONDS.sleep(1);
            long timepassed=System.currentTimeMillis()-starttime;
            long secondspassed=timepassed/1000;
            if(secondspassed==60)
            {
                secondspassed=0;
                starttime=System.currentTimeMillis();
            }
            if((secondspassed%60)==0)
            displayMinutes++;
    
        System.out.println(displayMinutes+"::"+secondspassed);
        }
    
    }

    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea