Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 253
  • Last Modified:

Simple Clock---Threads

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
me_new
Asked:
me_new
  • 3
1 Solution
 
CI-Ia0sCommented:
Add the label every time you update it and validate the frame's content pane with frame.getContentPane().validate(). That should do it. :)
0
 
CI-Ia0sCommented:
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
 
CI-Ia0sCommented:
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
 
objectsCommented:
you don't loop in your thread

change:

  if (mythread==thread)

to

  while (mythread==thread)
0
 
CEHJCommented:
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

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now