R4R Java SourceCode Java Clock Using Applet And Thread

Java Clock Using Applet And Thread

In this program we are going to learn how we can make a clock using Java Thread. We are using  the applet for graphical presentations (GUI).

We are making a thread which is timer thread .This is for display the time clock. We  implements the class  by Runnable interface to make a thread as we know we can make thread by two ways 1.By extends Thread Class and 2.by implements Runnable interface. We are using Runnable interface because in java we can not make multiple inheritance .We are extend here Applet here for make GUI.  

We are importing the following packages java.util.*,java.awt.*,java.applet.* and  java.text.* .The java.util.* package is import  for take the property of Date Class,NumberFormatException Class, SimpleTimeForamt Class and its methods. The java.awt.* package is import for the property those class which is used for make GUI ,make circle and lines.The java.text.*  package is import for the property of  SimpleDateFormat  class and its methods.

Classes and Methods used:
We are using  following predefined methods and classes.
We are using following Classes:
Applet class:
This class is used for GUI
SimpleTimeForamt Class:
Date Class
Color Class
Font Class
NullPointerException Class
NumberFormatException Class
Graphics Class
Integer Class
Math Class
Thread Class
InterruptedException Class

package com.r4r.example;
import java.util.*;
import java.awt.*;
import java.applet.*;
import java.text.*;


public class Clock extends Applet implements
 Runnable {
    private volatile Thread timer;       
// The thread that displays clock
    private int lastxs, lastys, lastxm,
                lastym, lastxh, lastyh;  
// Dimensions used to draw hands 
    private SimpleDateFormat formatter;  
// Formats the date displayed
    private String lastdate;             
// String to hold date displayed
    private Font clockFaceFont;          
// Font for number display on clock
    private Date currentDate;            
// Used to get date to display
    private Color handColor;            
 // Color of main hands and dial
    private Color numberColor;           
// Color of second hand and numbers
    private int xcenter = 80, ycenter = 55; 
// Center position

    public void init() {
        int x,y;
        lastxs = lastys = lastxm = lastym = 
lastxh = lastyh = 0;
        formatter = new SimpleDateFormat 
("EEE MMM dd hh:mm:ss yyyy", 
                                         
 Locale.getDefault());
        currentDate = new Date();
        lastdate = formatter.format(currentDate);
        clockFaceFont = new Font("Serif",
 Font.PLAIN, 14);
       

        try {
            setBackground(Color.green);
        } catch (NullPointerException e) {
        } catch (NumberFormatException e) {
        }
        try {
            handColor = new Color(1,24,16);
        } catch (NullPointerException e) {
        } catch (NumberFormatException e) {
        }
        try {
            numberColor = new Color(6,9,16);
        } catch (NullPointerException e) {
        } catch (NumberFormatException e) {
        }
        resize(300,300);              
// Set clock window size
    }

    // Paint is the main part of the program
    public void update(Graphics g) {
        int xh, yh, xm, ym, xs, ys;
        int s = 0, m = 10, h = 10;
        String today;

        currentDate = new Date();
        
        formatter.applyPattern("s");
        try {
            s = Integer.parseInt(formatter.
format(currentDate));
        } catch (NumberFormatException n) {
            s = 0;
        }
        formatter.applyPattern("m");
        try {
            m = Integer.parseInt(formatter.
format(currentDate));
        } catch (NumberFormatException n) {
            m = 10;
        }    
        formatter.applyPattern("h");
        try {
            h = Integer.parseInt(formatter.
format(currentDate));
        } catch (NumberFormatException n) {
            h = 10;
        }
    
        // Set position of the ends of the hands
        xs = (int) (Math.cos(s * Math.PI / 30 
- Math.PI / 2) * 45 + xcenter);
        ys = (int) (Math.sin(s * Math.PI / 30 
- Math.PI / 2) * 45 + ycenter);
        xm = (int) (Math.cos(m * Math.PI / 30
 - Math.PI / 2) * 40 + xcenter);
        ym = (int) (Math.sin(m * Math.PI / 30 
- Math.PI / 2) * 40 + ycenter);
        xh = (int) (Math.cos((h*30 + m / 2) 
* Math.PI / 180 - Math.PI / 2) * 30
                   + xcenter);
        yh = (int) (Math.sin((h*30 + m / 2) 
* Math.PI / 180 - Math.PI / 2) * 30
                   + ycenter);
    
        // Get the date to print at the bottom
        formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy");
        today = formatter.format(currentDate);

        g.setFont(clockFaceFont);
        // Erase if necessary
        g.setColor(getBackground());
        if (xs != lastxs || ys != lastys) {
            g.drawLine(xcenter, ycenter, lastxs, lastys);
            g.drawString(lastdate, 5, 125);
        }
        if (xm != lastxm || ym != lastym) {
            g.drawLine(xcenter, ycenter-1, lastxm, lastym);
            g.drawLine(xcenter-1, ycenter, lastxm, lastym); 
        }
        if (xh != lastxh || yh != lastyh) {
            g.drawLine(xcenter, ycenter-1, lastxh, lastyh);
            g.drawLine(xcenter-1, ycenter, lastxh, lastyh); 
        }

        // Draw date and hands
        g.setColor(numberColor);
        g.drawString(today, 5, 125);    
        g.drawLine(xcenter, ycenter, xs, ys);
        g.setColor(handColor);
        g.drawLine(xcenter, ycenter-1, xm, ym);
        g.drawLine(xcenter-1, ycenter, xm, ym);
        g.drawLine(xcenter, ycenter-1, xh, yh);
        g.drawLine(xcenter-1, ycenter, xh, yh);
        lastxs = xs; lastys = ys;
        lastxm = xm; lastym = ym;
        lastxh = xh; lastyh = yh;
        lastdate = today;
        currentDate = null;
    }

    public void paint(Graphics g) {
        g.setFont(clockFaceFont);
        // Draw the circle and numbers
        g.setColor(handColor);
        g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);
        g.setColor(numberColor);
        g.drawString("9", xcenter-45, ycenter+3); 
        g.drawString("3", xcenter+40, ycenter+3);
        g.drawString("12", xcenter-5, ycenter-37);
        g.drawString("6", xcenter-3, ycenter+45);

        // Draw date and hands
                g.setColor(numberColor);
        g.drawString(lastdate, 5, 125);    
        g.drawLine(xcenter, ycenter, lastxs, lastys);
        g.setColor(handColor);
        g.drawLine(xcenter, ycenter-1, lastxm, lastym);
        g.drawLine(xcenter-1, ycenter, lastxm, lastym);
        g.drawLine(xcenter, ycenter-1, lastxh, lastyh);
        g.drawLine(xcenter-1, ycenter, lastxh, lastyh); 
    }

    public void start() {
        timer = new Thread(this);
        timer.start();
    }

    public void stop() {
        timer = null;
    }

    public void run() {
        Thread me = Thread.currentThread();
        while (timer == me) {
            try {
                Thread.currentThread().sleep(100);
            } catch (InterruptedException e) {
            }
            repaint();
        }
    }

   
}

Download Source Code

Output Of The Clock:

Please download JVM and Install It.To see Clock