RTC.java

import java.awt.*;
import java.awt.font.*;
import javax.swing.*;
import java.util.*; // Calendar, Date
import java.text.*; // DateFormat, SimpleDateFormat

// Simple real-time clock applet -- WSLeipold -- 2003-09-03
public class RTC extends JApplet
{
    public void init()
    {
        int delay; // Delay (in msec) between updates.
        String dformat = null; // Date format string.
        int fontsize; // Font size for date string.

        int defaultDelay=1000;
        int defaultFontsize=14;

        // Parameter 'delay' is milliseconds between refreshes.
        String s_delay = getParameter("delay");
        try {
            delay = Integer.parseInt(s_delay);
            if (delay <= 0 || delay > 120000)
                delay = defaultDelay;
            }
        catch(NumberFormatException nfe) {
            delay = defaultDelay;
            }

        // Parameter 'format' is a SimpleDateFormat format string.
        String s_dformat = getParameter("format");
        try {
            DateFormat junk = new SimpleDateFormat(s_dformat);
            dformat = s_dformat;
            }
        catch(IllegalArgumentException iae) {
            dformat = null;
            }
        catch(NullPointerException npe) {
            dformat = null;
            }

        // Parameter 'fontsize' is size of displayed font.
        String s_fontsize = getParameter("fontsize");
        try {
            fontsize = Integer.parseInt(s_fontsize);
            if (fontsize <= 6 || fontsize > 144)
                fontsize = defaultFontsize;
            }
        catch(NumberFormatException nfe) {
            fontsize = defaultFontsize;
            }

        Container contentPane = getContentPane();
        JLabel label = new JLabel("<clock>",SwingConstants.LEFT);
        Font f = new Font("Monospaced",Font.PLAIN,fontsize);
        label.setFont(f);
        contentPane.add(label);

        Thread clockThread = new Thread(
            new RTC_runner(label,delay,dformat));
        clockThread.start();
    }
}


class RTC_runner implements Runnable
{
    public RTC_runner(JLabel label,int delay,String dformat)
    {
        this.label = label;
        this.delay = delay;
        if (this.delay <= 0)
            this.delay = 60000;
        try {
            // Check for a valid format.
            DateFormat test_df = new SimpleDateFormat(dformat);
            this.df = test_df;
            }
        catch(IllegalArgumentException iae) {
            this.df = new SimpleDateFormat(default_df);
            }
        catch(NullPointerException npe) {
            this.df = new SimpleDateFormat(default_df);
            }
    }

    public void run()
    {
        try {
            while (true) {
                label.setText(curdt());
                Thread.sleep(delay);
                }
            }
        catch(InterruptedException e) {
            }
    }

    public String curdt()
    {
        Date now = new Date();
        String dt = df.format(now);
        return dt;
    }

    private JLabel label;
    private int delay;
    private DateFormat df;
    private String default_df = "yyyy-MM-dd HH:mm:ss";
}