要求:
编写一个图形界面程序,运行之后,让其中有一个线程能在界面上不断显示系统当前时间(获取
时间可查询java.util.Calendar 类,它包含了多个用于获得系统时间的函数)。另让一个线程可以在界
面上提示当前系统时间下用户该做什么工作(例如当程序判断出系统时间现在是8:00到9:00,则提示
用户该上课;现在是23:00到8:00,则提示用户该休息)

解决方案 »

  1.   

    完成了一部分;显示时间,不过还差按时间显示行动:
    import java.util.*;import javax.swing.*;import java.awt.*;
    import java.awt.event.*;
    public class Main extends JFrame implements Runnable,ActionListener{
    Thread th1 = new Thread(this);
        Thread th2 = new Thread(this);
        JLabel labelDate,labelAshow;
        JPanel p1,p2;
        GridLayout gridLayout=new GridLayout(2,1,3,3);
        
        Main(){
         th1.start();
         th2.start();
         labelDate=new JLabel();
         labelAshow=new JLabel();
            labelDate.setHorizontalAlignment(JLabel.CENTER);
            
            p1=new JPanel();
            p2=new JPanel();
         p1.add(labelDate);
         p2.add(labelAshow);
            this.getContentPane().setLayout(new GridLayout(2,1));
        
         add(p1);
         add(p2);    
        
         setSize(800,600);
            setResizable(false);
            setVisible(true);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public void run()
        {
         try{
            while(true){
             if(Thread.currentThread()==th1){
              Calendar cal = Calendar.getInstance();
              int y = cal.get(Calendar.YEAR);
              int mon = cal.get(Calendar.MONTH)+1;
              int d = cal.get(Calendar.DATE);
              int h = cal.get(Calendar.HOUR);
              int min = cal.get(Calendar.MINUTE);
              int s = cal.get(Calendar.SECOND);
              int ap = cal.get(Calendar.AM_PM);
              if(ap==1)
               h = h+12;
              labelDate.setText("日期:"+y+"-"+((mon<=9)?"0"+mon:mon)+"-"+((d<=9)?"0"+d:d)+" 时间:"+h+":"+((min<=9)?"0"+min:min)+":"+((s<=9)?"0"+s:s));
              labelDate.setFont(new Font("楷体",Font.PLAIN,15));
              Thread.sleep(1000);
             }
             else 
             if(Thread.currentThread()==th2){         }
           }
         }
         catch(Exception ee){
         ee.printStackTrace();
         }
        }
        public void actionPerformed(ActionEvent ae) {
        }
        public static void main(String as[]){
         Main obj;
            obj = new Main();
           }}
      

  2.   


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;public class TestFrame extends JFrame
    {
    private JLabel lblTime = new JLabel();
    private JLabel lblDo = new JLabel();

    public TestFrame()
    {
    this.setLayout(new GridLayout(2, 1));
    add(lblTime);
    add(lblDo);

    new TimeThread().start();
    new DoThread().start();
    }

    private class TimeThread extends Thread
    {
    public void run()
    {
    while (true)
    {
    Calendar calendar = new GregorianCalendar();
    lblTime.setText(String.format("现在是:%d年%02d月%02d日 %02d:%02d:%02d", 
    calendar.get(Calendar.YEAR),
    calendar.get(Calendar.MONTH) + 1, 
    calendar.get(Calendar.DATE),
    calendar.get(Calendar.HOUR_OF_DAY), 
    calendar.get(Calendar.MINUTE),
    calendar.get(Calendar.SECOND)));
    try 
    {
    Thread.sleep(1000);
    }
    catch (InterruptedException e) 
    {
    e.printStackTrace();
    }
    }
    }
    }

    private class DoThread extends Thread
    {
    public void run()
    {
    while (true)
    {
    Calendar calendar = new GregorianCalendar();
    int hour = calendar.get(Calendar.HOUR_OF_DAY);
    int minute = calendar.get(Calendar.MINUTE);
    int secord = calendar.get(Calendar.SECOND);
    if (8 <= hour && hour < 9)
    {
    lblDo.setText("消息:该上课了");
    }
    else if (23 <= hour || hour < 8)
    {
    lblDo.setText("消息:该休息了");
    }
    else
    {
    lblDo.setText("消息:无");
    }

    try 
    {
    Thread.sleep(1000);
    }
    catch (InterruptedException e) 
    {
    e.printStackTrace();
    }
    }
    }
    }

    public static void main(String[] args)
    {
    EventQueue.invokeLater(new Runnable()
    {
    public void run()
    {
    JFrame frame = new TestFrame();
    frame.setSize(250, 100);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    });
    }
    }
      

  3.   

    楼主也可以去学习一下timer,timertask这两个类。里面有比较好用的方法。
      

  4.   

    多谢各位的帮忙了,主要是因为实验要验收,而我现在还不打算较深入JAVA,目前在学linux方面的编程