zoukankan      html  css  js  c++  java
  • 初学多线程练习1--电子时钟

      模拟一个电子时钟,它可以在任何时候被启动或者停止,并可以独立的运行。

    1.定义一个Clock类。它继承Label类,并实现Runnable接口。这个类中有一个Thread类型的clocker域,以及start()和run()方法。在run()方法中,每隔一秒就把系统时间显示为label的文本。

     1 class Clock extends Label implements Runnable
     2 {
     3     //定义Thread类型的clocker域
     4     public Thread clocker=null;
     5     public Clock()
     6     {
     7         
     8         //初始化时,把label设置为当前系统时间
     9         //调用toString方法转化为String类型
    10         setText(new Date().toString());
    11     }
    12     //控制线程的启动
    13     public void start()
    14     {
    15         if(clocker==null)
    16         {
    17             //clocker通过Thread类构造方法得到的对象进行初始化,并将Clock类的当前对象作为参数
    18             clocker=new Thread(this);
    19             clocker.start();
    20         }
    21 
    22     }
    23     //控制线程的停止
    24     public void stop()
    25     {
    26         clocker=null;
    27     }
    28     //实现Runnable接口中的run()方法
    29     public void run()
    30     {
    31         Thread currentThread=Thread.currentThread();
    32         //判断clocker是否是当前运行的线程
    33         while(clocker==currentThread)
    34         {
    35                        setText(new Date().toString());
    36                        try
    37                       {      //休眠1s钟
    38                               clocker.sleep(1000);
    39             }
    40             catch (InterruptedException ie)
    41             {
    42                 System.out.println("Thread error:"+ie);
    43             }
    44         }
    45     
    46     }
    47 
    48 }

    2.定义一个ClockFrame类。它继承Frame类,并实现ActionListener接口。在这个类中定义start和stop按钮来控制电子时钟的运行。并且这个类有一个Clock类的域,把这个Clock类对象添加到ClockFrame类中显示。

     1 public class ClockFrame extends Frame implements ActionListener
     2 {
     3     private Button start=new Button("Start");
     4     private Button stop=new Button("Stop");
     5     private Clock c=new Clock();
     6     public ClockFrame()
     7     {
     8         super("电子时钟");
     9         //设置窗体使用流式布局
    10         setLayout(new FlowLayout());
    11         //添加按钮并且为其注册监听器
    12         add(start);
    13         start.addActionListener(this);
    14         add(stop);
    15         stop.addActionListener(this);
    16         //使用继承WindowAdapter的匿名内部类来实现窗口的关闭
    17         addWindowListener(new WindowAdapter()
    18         {
    19             public void windowClosing(WindowEvent we)
    20             {System.exit(0);}
    21         });
    22         add(c);
    23         //使构件在窗口中得到合理的安排。
    24         pack();
    25         setVisible(true);
    26 
    27 
    28     }
    29     //通过调用Clock对象中的方法,实现对事件的响应。
    30     public void actionPerformed(ActionEvent ae)
    31     {
    32         if(ae.getSource()==start)
    33         {
    34             c.start();
    35         }
    36         else
    37             if(ae.getSource()==stop)
    38             c.stop();
    39 
    40     }
    41     public static void main(String[] args)
    42     {
    43         new ClockFrame();
    44     }
    45 }

    3、运行:

    注:

    需要导入的类:

    import java.awt.*;
    import java.awt.event.*;
    import java.util.Date;

  • 相关阅读:
    [Abp vNext 源码分析]
    C# 结合 PInvoke 对接 IP 摄像头的笔记
    Abp vNext 自定义 Ef Core 仓储引发异常
    [Abp vNext 源码分析]
    [Abp vNext 源码分析]
    [Abp vNext 源码分析]
    网站SEO中服务器优化的三个问题
    用香港服务器还是国内服务器好
    租用香港服务器最重要的三个问题
    如何选择服务器操作系统
  • 原文地址:https://www.cnblogs.com/wsw-tcsygrwfqd/p/4979674.html
Copyright © 2011-2022 走看看