Solved

Simple Clock---Threads

Posted on 2004-08-28
5
215 Views
Last Modified: 2010-03-31
The Thread runs just once.
It Simply Displays the Date once.
It Does not refresh...Why?

Here's the Code



import javax.swing.*;
import java.util.*;

public class Clock2 extends JPanel implements Runnable
{

      JLabel label;
      Thread thread;
      public Clock2()
      {
      label=new JLabel();
      addLabel();
      }

      public void addLabel()
      {
      add(label);
      thread=new Thread(this,"Clock");
      thread.start();
      }

      public void run()
      {
      Thread mythread=Thread.currentThread();

      if (mythread==thread)
            {
                  System.out.println("In");
                  Calendar cal=Calendar.getInstance();
                  label.setText(cal.getTime().toString());
                  try{      Thread.sleep(200);  System.out.println("Up");}
                  catch(Exception e){}
            }
      }

      public static void main(String args[])
      {
            JFrame frame=new JFrame();
            frame.getContentPane().add(new Clock2());
            frame.setSize(300,300);
            frame.setVisible(true);
      }

}

0
Comment
Question by:me_new
  • 3
5 Comments
 
LVL 3

Expert Comment

by:CI-Ia0s
ID: 11924079
Add the label every time you update it and validate the frame's content pane with frame.getContentPane().validate(). That should do it. :)
0
 
LVL 3

Expert Comment

by:CI-Ia0s
ID: 11924090
Also note: label.setText(cal.getTime().toString()) will need to be in a loop or timer. It should look something like this (though this is an infinite loop):
JFrame frame; //Declare frame at the top so it isn't local

while (true)
{
label.setText(cal.getTime().toString());
frame.add(label);
frame.getContentPane().validate();
}
You might want to use a timer instead, firing once every second...
0
 
LVL 3

Expert Comment

by:CI-Ia0s
ID: 11924095
Oh, oops. You're adding the label to the Panel. In that case, just make frame.add(label) (in the above example) into add(label). That should do it...
0
 
LVL 92

Accepted Solution

by:
objects earned 20 total points
ID: 11924179
you don't loop in your thread

change:

  if (mythread==thread)

to

  while (mythread==thread)
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 11924910
You don't need to call

>>Calendar cal=Calendar.getInstance();

in each loop in run. Just call it once in the ctor
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

For customizing the look of your lightweight component and making it look lucid like it was made of glass. Or: how to make your component more Apple-ish ;) This tip assumes your component to be of rectangular shape and completely opaque. (COD…
After being asked a question last year, I went into one of my moods where I did some research and code just for the fun and learning of it all.  Subsequently, from this journey, I put together this article on "Range Searching Using Visual Basic.NET …
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:

930 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now