FileDocCategorySizeDatePackage
AnimatedCharacterDisplayCanvas.javaAPI DocExample1990Sun Apr 18 22:38:10 BST 2004javathreads.examples.ch04.example3

AnimatedCharacterDisplayCanvas

public class AnimatedCharacterDisplayCanvas extends CharacterDisplayCanvas implements Runnable, CharacterListener

Fields Summary
private boolean
done
private int
curX
private Lock
lock
private Condition
cv
private Thread
timer
Constructors Summary
public AnimatedCharacterDisplayCanvas()


      
    
public AnimatedCharacterDisplayCanvas(CharacterSource cs)

        super(cs);
    
Methods Summary
public synchronized voidnewCharacter(CharacterEvent ce)

        curX = 0;
        tmpChar[0] = (char) ce.character;
        repaint();
    
protected synchronized voidpaintComponent(java.awt.Graphics gc)

        Dimension d = getSize();
        gc.clearRect(0, 0, d.width, d.height);
        if (tmpChar[0] == 0)
            return;
        int charWidth = fm.charWidth(tmpChar[0]);
        gc.drawChars(tmpChar, 0, 1,
                     curX++, fontHeight);
    
public voidrun()

        try {
            lock.lock();
            while (true) {
                try {
                    if (done) {
                        cv.await();
                    } else {
                        repaint();
                        cv.await(100, TimeUnit.MILLISECONDS);
                    }
	        } catch (InterruptedException ie) {
	            return;
	        }
            }
        } finally {
            lock.unlock();
        }
    
public voidsetDone(boolean b)

        try {
            lock.lock();
            done = b;

            if (timer == null) {
                timer = new Thread(this);
                timer.start();
            }
            if (!done) cv.signal();
        } finally {
            lock.unlock();
        }