Results 1 to 2 of 2
Thread: Analog Clock Problem
- 02-08-2012, 05:13 AM #1
Member
- Join Date
- Feb 2012
- Posts
- 2
- Rep Power
- 0
Analog Clock Problem
Can anyone explain to me why this clocks hands never move? Whenever the applet is launched the hands point to the right positions, but never move. Why, and how am I to fix it?
Thank you for you time.
Java Code:import java.awt.*; import java.text.*; import java.util.*; import java.applet.*; public class clock2 extends Applet implements Runnable{ private static final long serialVersionUID = 1787899701025425670L; Thread t = null; boolean threadSuspended; String timeString = ""; int width, height; Calendar calendar = Calendar.getInstance(); Date trialTime = new Date(); int hrHand, mnHand, secHand, radius = 95, hrLength, mnLength, secLength, inLength, cx, cy, x1, y1, x2, y2; public void init() { super.init(); width = getSize().width; height = getSize().height; resize(width, height); hrLength = 6*radius/10; mnLength = 8*radius/10; secLength = 9*radius/10; inLength = 8*radius/10; cx = width/2; cy = height/2; } public void start() { if(t == null) { t = new Thread(this); t.setPriority(Thread.MIN_PRIORITY); threadSuspended = false; t.start(); } else { if (threadSuspended) { threadSuspended = false; synchronized(this) { notify(); } } } } public void stop() { threadSuspended = true; } public void run() { try { while (true) { Calendar cal = Calendar.getInstance(); hrHand = cal.get(Calendar.HOUR_OF_DAY); if (hrHand > 12) hrHand -= 12; mnHand = cal.get(Calendar.MINUTE); secHand = cal.get(Calendar.SECOND); SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss", Locale.getDefault()); Date date = cal.getTime(); timeString = formatter.format(date); if (threadSuspended) { synchronized(this) { while (threadSuspended) { wait(); } } } repaint(); Thread.sleep(1000); } } catch (InterruptedException e) { } } public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; Graphics2D g2 = (Graphics2D) g; calendar.setTime(trialTime); hrHand = calendar.get(Calendar.HOUR_OF_DAY); mnHand = calendar.get(Calendar.MINUTE); secHand = calendar.get(Calendar.SECOND); if(hrHand >= 12) hrHand -= 12; for (int i = 0; i < 60; i++) { g.setColor(Color.black); x2 = (int)(cx + radius * Math.sin(i * 2 * Math.PI / 60)); y2 = (int)(cy - radius * Math.cos(i * 2 * Math.PI / 60)); if (i % 6 != 0) { x1 = (int)(cx + 0.9f * radius * Math.sin(i * 2 * Math.PI / 60)); y1 = (int)(cy - 0.9f * radius * Math.cos(i * 2 * Math.PI / 60)); } else { x1 = (int)(cx + 0.8f * radius * Math.sin(i * 2 * Math.PI / 60)); y1 = (int)(cy - 0.8f * radius * Math.cos(i * 2 * Math.PI / 60)); } g.drawLine(x1, y1, x2, y2); } g2d.setFont(getFont()); for(int hour = 1; hour <= 12; hour++) { double angle = (hour-3)*2*Math.PI/12; int x = (int)(Math.cos(angle)*(width/3))+width/2-5; int y = (int)(Math.sin(angle)*(width/3))+width/2+5; g.setColor(Color.black); g2d.drawString(""+hour, x, y); } x2 = (int)(cx + hrLength * Math.sin((hrHand + mnHand / 60 + secHand / 3600) * 2 * Math.PI / 12)); y2 = (int)(cy - hrLength * Math.cos((hrHand + mnHand / 60 + secHand / 3600) * 2 * Math.PI / 12)); g.setColor(Color.red); g2.setStroke(new BasicStroke(2)); g.drawLine(cx - 1, cy - 1, x2 - 1, y2 - 1); g2.setStroke(new BasicStroke(0)); g.drawLine(cx - 1, cy - 1, x2 - 1, y2 - 1); x2 = (int)(cx + mnLength * Math.sin((mnHand + secHand / 60) * 2 * Math.PI / 60)); y2 = (int)(cy - mnLength * Math.cos((mnHand + secHand / 60) * 2 * Math.PI / 60)); g.setColor(Color.green); g2.setStroke(new BasicStroke(2)); g.drawLine(cx - 1, cy - 1, x2 - 1, y2 - 1); g2.setStroke(new BasicStroke(0)); x2 = (int)(cx + secLength * Math.sin(secHand * 2 * Math.PI / 60)); y2 = (int)(cy - secLength * Math.cos(secHand * 2 * Math.PI / 60)); g.setColor(Color.blue); g2.setStroke(new BasicStroke(0)); g.drawLine(cx - 1, cy - 1, x2 - 1, y2 - 1); g.setColor(Color.black); g2.setStroke(new BasicStroke(2)); g.drawOval((width - 2 * radius) / 2, (height - 2 * radius) / 2, 2 * radius, 2 * radius); g2.setStroke(new BasicStroke(0)); g.setColor(Color.black); g.drawString(timeString, 75, height-105); } }
- 02-08-2012, 05:23 AM #2
Member
- Join Date
- Feb 2012
- Posts
- 2
- Rep Power
- 0
Re: Analog Clock Problem
My bad everyone I found the problem in paint this needs to come out
calendar.setTime(trialTime);
hrHand = calendar.get(Calendar.HOUR_OF_DAY);
mnHand = calendar.get(Calendar.MINUTE);
secHand = calendar.get(Calendar.SECOND);
Now the hands move, but the refresh is out of synch how do you get the clock from catching at spots then skip a couple of ticks at moments of the program?
Similar Threads
-
24 hour clock to 12 hour clock project.
By bs3ac in forum New To JavaReplies: 4Last Post: 01-08-2013, 10:10 AM -
Analog Clock Help
By mprentice84 in forum New To JavaReplies: 13Last Post: 06-02-2010, 05:29 PM -
Developing Drag and drop Analog Clock
By britto_bicsjohn in forum AWT / SwingReplies: 2Last Post: 08-06-2009, 06:19 AM -
SWT analog of Swing FocusEvent.getOppositeComponent?
By asdqwezx in forum SWT / JFaceReplies: 0Last Post: 07-16-2009, 12:52 AM -
Pogo clock problem
By tampacurt in forum New To JavaReplies: 0Last Post: 11-17-2007, 02:18 AM


LinkBack URL
About LinkBacks
Reply With Quote
Bookmarks