日期:2014-05-20  浏览次数:20772 次

java线程的问题,请高手解决。
模拟电子时钟,它可以在任何时候被启动或者停止,并可独立运行。这个类称为Clock类,它继承Label类。这个类有一个Thread类型的clocker域,以及start(),stop(),和run()方法,在run()方法的while循环中,每隔一秒就把系统时间显示为label文本。构造方法初始化时,把label设为系统的当前时间。
此题该如何用java编写。(严格按照上面的要求来写)

------解决方案--------------------
LZ给分。
Java code

import java.awt.Frame;
import java.awt.Label;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

public class Test1 
{
        public static void main(String[] args) {
            Clock clock = new Clock();
            Frame f = new Frame();
            f.setSize(300, 300);
            f.add(clock);
            clock.start();   //自动计时开始
            f.setVisible(true);
            try {
                Thread.sleep(10000);
                clock.close();   //10秒后计时停止
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            
        }
}

class Clock extends Label {
    Clocker cl;
    public Clock() {
        cl = new Clocker();
    }
    
    public void start() {
        cl.start();
    }
    
    public void close() {
        cl.setF();
    }
    
    class Clocker extends Thread {
        Date time = null;
        boolean f = true;
        public void run() {
            GregorianCalendar gc = new GregorianCalendar(Locale.CHINA);
            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
            while(f) {
                Clock.this.setText(sf.format(gc.getTime()));
                try {
                    Thread.sleep(1000);
                    gc.set(Calendar.SECOND,gc.get(Calendar.SECOND)+1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        public void setF() {
            f = false;
        }
    }
}