Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Simple Clock---Threads

Posted on 2004-08-28
5
Medium Priority
?
251 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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 80 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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
In this post we will learn how to make Android Gesture Tutorial and give different functionality whenever a user Touch or Scroll android screen.
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
Suggested Courses

715 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