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

public class orologio extends java.applet.Applet implements Runnable {

private Thread avanza = null; /* Il thread dell'orologio !!! */

  /* Deve far partire l'orologio */	
  public void start() {
    if (avanza == null) {                    // Se il thread non esiste ancora
      avanza = new Thread(this, "orologio"); // Lo crea 
      avanza.start();                        // E lo fa partire
    }
  }

  /* Metodo che esegue il 'lavoro duro' - azione */
  public void run() {
    // Questo metodo viene invocato per ogni thread dell'Applet, quindi deve
    // eseguire il lavoro solo nel caso il thread sia quello dell'animazione
    // Il loop termina quando l'attributo avanza viene messo a null in stop()
    while (Thread.currentThread() == avanza) {
      repaint();                        // Ridisegna l'Applet
      try {
        Thread.sleep(1000);             // Attende 1 Secondo
      } catch (InterruptedException e){ // Nessuna azione
      }
    }
  }

  /* Funzione di disegno che semplicemente scrive data ed ora */	
  public void paint(Graphics g) {
    Date now = new Date();               // L'oggetto 'Date' contiene data ed ora di sistema
    g.drawString(now.toString(), 5, 10); // Usa 'toSring' per una versione stampabile di data ed ora
  }

  /* Se usciamo dalla pagina, elimina il thread */
  public void stop() {
    avanza = null; // se 'avanza' diventra 'null', il metodo 'run' termina
  }
}