1 import java.applet.*;
2 import javax.swing.*;
3 import java.awt.event.*;
4 import java.awt.*;
5
6 public class ClockWithAudioOnSeparateThread extends JApplet {
7 protected AudioClip[] hourAudio = new AudioClip[12];
8 protected AudioClip[] minuteAudio = new AudioClip[60];
9
10
11 protected AudioClip amAudio =
12 Applet.newAudioClip(this.getClass().getResource("/audio/am.au"));
13 protected AudioClip pmAudio =
14 Applet.newAudioClip(this.getClass().getResource("/audio/pm.au"));
15
16
17 private StillClock clock = new StillClock();
18
19
20 private Timer timer = new Timer(1000, new TimerListener());
21
22
23 private JLabel jlblDigitTime = new JLabel("", JLabel.CENTER);
24
25 @Override
26 public void init() {
27
28 for (int i = 0; i < 12; i++)
29 hourAudio[i] = Applet.newAudioClip(
30 this.getClass().getResource("/audio/hour" + i + ".au"));
31
32
33 for (int i = 0; i < 60; i++)
34 minuteAudio[i] = Applet.newAudioClip(
35 this.getClass().getResource("/audio/minute" + i + ".au"));
36
37
38 add(clock, BorderLayout.CENTER);
39 add(jlblDigitTime, BorderLayout.SOUTH);
40 }
41
42 @Override
43 public void start() {
44 timer.start();
45 }
46
47 @Override
48 public void stop() {
49 timer.stop();
50 }
51
52 private class TimerListener implements ActionListener {
53 @Override
54 public void actionPerformed(ActionEvent e) {
55 clock.setCurrentTime();
56 clock.repaint();
57 jlblDigitTime.setText(clock.getHour() + ":" + clock.getMinute()
58 + ":" + clock.getSecond());
59 if (clock.getSecond() == 0)
60 announceTime(clock.getHour(), clock.getMinute());
61 }
62 }
63
64
65 public void announceTime(int h, int m) {
66 new Thread(new AnnounceTimeOnSeparateThread(h, m)).start();
67 }
68
69
70 class AnnounceTimeOnSeparateThread implements Runnable {
71 private int hour, minute;
72
73
74 public AnnounceTimeOnSeparateThread(int hour, int minute) {
75 this.hour = hour;
76 this.minute = minute;
77 }
78
79 public void run() {
80
81 hourAudio[hour % 12].play();
82
83 try {
84
85 Thread.sleep(1500);
86
87
88 minuteAudio[minute].play();
89
90
91 Thread.sleep(1500);
92 }
93 catch (InterruptedException ex) {
94 }
95
96
97 if (hour < 12)
98 amAudio.play();
99 else
100 pmAudio.play();
101 }
102 }
103
104 public static void main(String[] args) {
105 ClockWithAudioOnSeparateThread applet = new ClockWithAudioOnSeparateThread();
106 applet.init();
107 applet.start();
108 JFrame frame = new JFrame();
109 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
110 frame.setTitle("ClockWithAudio");
111 frame.getContentPane().add(applet, BorderLayout.CENTER);
112 frame.setSize(400, 320);
113 frame.setVisible(true);
114 }
115 }