Introducción al lenguaje JAVA - Animaciones simples y multithreading

10 - Animaciones simples y multithreading

[editar]
Curso gratis creado por Unav. Extraido de: http://www.unav.es/cti
21 de Septiembre de 2005
Se puede hablar de dos tipos:

  • Animacion de tipo ‘dibujos animados’: presentar una sucesion rapida de imagenes precargadas GIF o JPEG (p205 21days)

  • Animacion dibujada en tiempo real; veamos
  • Un ejemplo que NO funciona (no aparece nada en pantalla);


MalRelojDigitalApplet.java

import java.awt.Graphics;
import java.awt.Font;
import java.util.Date;

public class MalRelojDigitalApplet extends java.applet.Applet
{
Font fuente = new Font("TimesRoman", Font.BOLD, 24);
Date fecha;

public void start()
{
while (true)
{
fecha = new Date();
repaint();
try
{
Thread.sleep(10000);
} catch(InterruptedException e)
{;}
}
}

public void paint(Graphics g)
{
g.setFont(fuente);
g.drawString(fecha.toString(), 10, 50);
}
}


  • ¿Porqué no funciona?: paint nunca se ejecuta ya que el bucle while monopoliza la ejecucion.
  • Cómo debe hacerse para que funcione: usando Threads

Ej:
BienRelojDigitalApplet.java

import java.awt.Graphics;
import java.awt.Font;
import java.util.Date;

public class BienRelojDigitalApplet extends java.applet.Applet implements Runnable cambio
{
Font fuente = new Font("TimesRoman", Font.BOLD, 24);
Date fecha;
Thread runner;
cambio

cambio
public void start()


{
if (runner
null)
{
runner = new Thread(this);
runner.start();
}
else
{
System.out.println("Stop");
}
}

cambio
public void stop()
{
if (runner != null)
{
runner.stop();
runner = null;
}
else
{
System.out.println("Stop");
}
}

cambio
public void run()
{
while (true)
{
fecha = new Date();
repaint();
try
{
Thread.sleep(1000);
} catch(InterruptedException e)
{;}
}
}

public void paint(Graphics g)
{
{
g.setFont(fuente);
g.drawString(fecha.toString(), 10, 50);
}
}
}

  • El problema del parpadeo: el programa anterior funciona, pero se aprecia un parpadeo molesto cada 3 o 4 segundos
  • Porqué aparece parpadeo:
    • (las imagenes son demasiado grandes. Con pequeños cuadros es inapreciable el parpadeo)
    • repaint() llama al metodo update()
    • update() borra la pantalla por completo y la rellena con el color de fondo. Despues llama a paint()


public void update(Graphics g)
{
g.setColor(getBackground());
g.fillRect(0,0,width,height);
g.setColor(getForeground());
paint(g);
}

    • paint() escribe el nuevo pantallazo
  • Es la llamada a update() la que produce el parpadeo.
  • Soluciones posibles

    1. Sobreescribir update() para que no borre la pantalla o que solo borre una cierta area
    2. Clipping: re-dibujar solo aquello que cambia. Metodo clipRect() de la clase Graphics
    3. Doble-buffering: hacer los cambios en una pantalla ‘virtual’ y volcar el resultado a la pantalla ‘real’ (p212 21days). Es el metodo mas complicado...
[editar]

14 opiniones

defaced By LatinHackTeam
OwNz yOur bOx syst3m...
We Are : d4n1ux eCORE x_Jeshua J3H3S chip d3 b10s RayoK3nt


defaced By LatinHackTeam
OwNz yOur bOx syst3m...
We Are : d4n1ux eCORE x_Jeshua J3H3S chip d3 b10s RayoK3nt

admin

defaced By LatinHackTeam
OwNz yOur bOx syst3m...
We Are : d4n1ux eCORE x_Jeshua J3H3S chip d3 b10s RayoK3nt

lala


lala

Ejemplos.

Desearia que por favor pusieran ejemplos para poder observarlos y darnos idea de lo que hace algun evento.
Muy bueno.

Me parece muy interesante el curso de java, continuen con esa labor gracioas.
1 2 3 | siguiente >

Cursos gratis relacionados con 'Introducción al lenguaje JAVA'

El lenguaje JavaScript es el complemento ideal del HTML, al permitir a la página realizar... Más »
El objetivo de este curso es aprender a programar en el lenguaje Ada, desde sus... Más »
Python es un lenguaje de programación de alto nivel, interpretado, interactivo y de propósito general. Más »
Cuando hablamos de un sitio web nos estamos refiriendo en realidad a un conjunto de... Más »
Linux es una gran herramienta, la uso desde hace años y se ha convertido en... Más »

Autor y licencia de 'Introducción al lenguaje JAVA'


Curso gratis de Unav. Extraido de: http://www.unav.es/cti CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.