Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Cursos gratis / Introducción al lenguaje JAVA - Animaciones simples y multithreading

Introducción al lenguaje JAVA - Animaciones simples y multithreading

 ***** (10 opiniones)
Creative Commons Curso gratis de Unav - 21 de Septiembre de 2005
Temas Relacionados: JavaOrientación a objetos
10. Animaciones simples y multithreading
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...
Autor y licencia de 'Introducción al lenguaje JAVA - Animaciones simples y multithreading'
Unav Extraído de: http://www.unav.es/cti

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
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.

Wikis relacionados con 'Introducción al lenguaje JAVA - Animaciones simples y multithreading'

La idea es dar una guía ordenada para el estudio de este lenguaje, muy poderoso... Más »
A diferencia de la orientación a procedimientos (OP), la orientación a objetos (OO) no concibe... Más »
Como es sabido, el concepto de función metalingüística y su ámbito de aplicación han quedado... Más »
En los años setenta convergen en España una serie de discursos vinculados a conceptos de... Más »
XML es un metalenguaje, es decir, un lenguaje hecho para poder construir otros lenguajes con... Más »
¿Estás seguro de que deseas eliminar este capítulo?