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(); } }