package javacodebook.thread.animation;

import java.util.Random;
import java.awt.*;

/**
 * Dieser Thread dient dazu, den Anzeigebereich der Kreise in einem zeitlichen
 * Abstand von 5 Sekunden zu löschen (bzw. durch ein weißes Rechteck zu
 * überschreiben.
 *
 * @author Mark Donnermeyer
 */
class CleanerThread extends Thread {
    private Canvas animationArea;
    private int xMax;
    private int yMax;
    
    public CleanerThread(Canvas animationArea) {
        // Dies ist der Zeichenbereich, der gelöscht werden soll.
        this.animationArea = animationArea;
        
        // Der gesamte Bereich soll gelöscht werden. Dafür muß zunächst einmal
        // die Größe des Bereiches festgestellt werden. Da sich die Größe nicht
        // ändert, wird die Grösse hier einmal abgefragt.
        xMax = (int)animationArea.getSize().getWidth();
        yMax = (int)animationArea.getSize().getHeight();
    }
    
    public void run() {
        while(true) {
            // Das Löschen erfolgt in einem synchronisierten Block. Als
            // Lock-Object dient der Zeichenbereich, welchen auch die anderen
            // Threads als Lock-Object benutzen. Damit wird sichergestellt,
            // dass während des Löschen des Bereichs kein anderer Thread in
            // den Bereich zeichnet.
            synchronized(animationArea) {
                // Der Bereich wird jetzt durch ein weisses Rechteck
                // überschrieben.
                Graphics g = animationArea.getGraphics();
                g.setColor(Color.white);
                g.fillRect(0, 0, xMax, yMax);
            }
            
            // Das Überschreiben erfolgt alle 5 Sekunden.
            try {
                sleep(5000);
            }
            catch (Exception ignore) {}
        }
    }
}
