程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java多線程編程制造電子時鐘

java多線程編程制造電子時鐘

編輯:關於JAVA

java多線程編程制造電子時鐘。本站提示廣大學習愛好者:(java多線程編程制造電子時鐘)文章只能為提供參考,不一定能成為您想要的結果。以下是java多線程編程制造電子時鐘正文


  模仿一個電子時鐘,它可以在任什麼時候候被啟動或許停滯,並可以自力的運轉。

1.界說一個Clock類。它繼續Label類,並完成Runnable接口。這個類中有一個Thread類型的clocker域,和start()和run()辦法。在run()辦法中,每隔一秒就把體系時光顯示為label的文本。

class Clock extends Label implements Runnable
{
  //界說Thread類型的clocker域
  public Thread clocker=null;
  public Clock()
  {
    
    //初始化時,把label設置為以後體系時光
    //挪用toString辦法轉化為String類型
    setText(new Date().toString());
  }
  //掌握線程的啟動
  public void start()
  {
    if(clocker==null)
    {
      //clocker經由過程Thread類結構辦法獲得的對象停止初始化,並將Clock類確當前對象作為參數
      clocker=new Thread(this);
      clocker.start();
    }

  }
  //掌握線程的停滯
  public void stop()
  {
    clocker=null;
  }
  //完成Runnable接口中的run()辦法
  public void run()
  {
    Thread currentThread=Thread.currentThread();
    //斷定clocker能否是以後運轉的線程
    while(clocker==currentThread)
    {
            setText(new Date().toString());
            try
           {   //休眠1s鐘
               clocker.sleep(1000);
      }
      catch (InterruptedException ie)
      {
        System.out.println("Thread error:"+ie);
      }
    }
  
  }

}

2.界說一個ClockFrame類。它繼續Frame類,並完成ActionListener接口。在這個類中界說start和stop按鈕來掌握電子時鐘的運轉。而且這個類有一個Clock類的域,把這個Clock類對象添加到ClockFrame類中顯示。

public class ClockFrame extends Frame implements ActionListener
{
  private Button start=new Button("Start");
  private Button stop=new Button("Stop");
  private Clock c=new Clock();
  public ClockFrame()
  {
    super("電子時鐘");
    //設置窗體應用流式結構
    setLayout(new FlowLayout());
    //添加按鈕而且為其注冊監聽器
    add(start);
    start.addActionListener(this);
    add(stop);
    stop.addActionListener(this);
    //應用繼續WindowAdapter的匿名外部類來完成窗口的封閉
    addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent we)
      {System.exit(0);}
    });
    add(c);
    //使構件在窗口中獲得公道的支配。
    pack();
    setVisible(true);


  }
  //經由過程挪用Clock對象中的辦法,完成對事宜的呼應。
  public void actionPerformed(ActionEvent ae)
  {
    if(ae.getSource()==start)
    {
      c.start();
    }
    else
      if(ae.getSource()==stop)
      c.stop();

  }
  public static void main(String[] args)
  {
    new ClockFrame();
  }
}

3、運轉:

注:

須要導入的類:

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

再給年夜家一個網友的做法,異常不錯

import java.awt.*;  
import javax.swing.*;  
import java.util.Date;  
 
/*TimeDemo.java 
 * @src 
public class TimeDemo extends JFrame implements Runnable {  
 
  Thread clock;  
    
  public static void main(String[] args) {  
  TimeDemo td =new TimeDemo();  
  td.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //點擊可見窗口右上角的紅叉封閉  
   }  
    
  public TimeDemo(){  
   super("雪地散步---java多線程數字時鐘"); //繼續父類結構辦法,這裡相當於Font("雪地散步---java多線程數字時鐘");  
setTitle("kk");  //這個則是子類的  
   this.setFont(new Font("Times New Roman",Font.BOLD,60));  //設置字體年夜小  
   this.go();    //自界說go辦法,用於今後開啟線程  
   setBounds(400,300,300,100);  
   this.setVisible(true);  
  }  
 
   public void go(){  
  stop();  
   if(clock==null){  
  //線程履行的主題作為Thread類結構辦法的參數。  
   clock=new Thread(this);  
   clock.start();     //開啟線程,完成run辦法  
  }  
}  
 
  public void run() {  
    while(true)   //讓線程一向停止  
  {  
//repain()辦法是來掌握Graphics類的paint()辦法的,repain()辦法履行一次,即讓paint()辦法履行一次  
      repaint();   
     try{  
      Thread.sleep(1000);   //參數是毫秒,1秒即1000毫秒  
     }catch(InterruptedException e){}  
    }  
   }  
 
  public void stop(){  
   clock=null;  
  }  
 
  public void paint(Graphics g){  
   String s="";  
   Date now=new Date();  
   int hour=now.getHours();                       
   int minute=now.getMinutes();  
   int second=now.getSeconds();  
   s=hour+":"+minute+":"+second;  
   g.setColor(Color.green);  
   Dimension dim=getSize();  
   g.fillRect(0, 0, dim.width, dim.height);  
   g.setColor(Color.red);  
   g.drawString(s, 20, 80);  
  }  
} 

例子三:思緒加倍的奇妙,分享給年夜家

import java.awt.BorderLayout;
 import java.awt.Canvas;
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.Graphics;
 import java.sql.Date;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import javax.swing.JFrame;
 import javax.swing.JPanel;
 class Clock extends Canvas implements Runnable{

   /*
   http://ohgrateboy.blog.163.com我的博客
   */

   private static final long serialVersionUID = 3660124045489727166L;
   Thread t;
   JFrame frame=new JFrame();
   JPanel conPane;
   String time;
   int i=0;
   Date timer;
   public Clock(){
     conPane=(JPanel)frame.getContentPane();
     conPane.setLayout(new BorderLayout());
     conPane.setSize(280,40);
     conPane.setBackground(Color.white);
     conPane.add(this,BorderLayout.CENTER);
     t=new Thread(this);        //實例化線
    t.start();    //挪用線程
    
     frame.setVisible(true);
     frame.setSize(300, 150);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }

   public void run(){

     while(true){

     try{

       Thread.sleep(1000);          //休眠1秒鐘

    }catch(InterruptedException e){

       System.out.println("異常");
     }
     this.repaint(100);

   }

   }

   public void paint(Graphics g){

     Font f=new Font("宋體",Font.BOLD,16);

     SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss");//格局化時光顯示類型
    Calendar now=Calendar.getInstance();

     time=SDF.format(now.getTime());    //獲得以後日期和時光
    g.setFont(f);

     g.setColor(Color.orange);

     g.drawString(time,45,25);

   }
   public static void main(String args[]){
     new Clock();
   }

 } 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved