已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章 關(guān)機(jī)工具(Timer類(lèi)+系統(tǒng)命令)第8章 關(guān)機(jī)工具(Timer類(lèi)+系統(tǒng)命令)在Java語(yǔ)言中,線(xiàn)程的類(lèi)除了類(lèi)Thread外,還有類(lèi)Timer和類(lèi)TimerTask。因此對(duì)于程序員來(lái)說(shuō),如果想掌握好事件機(jī)制,除了掌握類(lèi)Thread,還必須要學(xué)習(xí)類(lèi)Timer和類(lèi)TimerTask。本章將通過(guò)模擬關(guān)機(jī)工具的功能,介紹如何調(diào)用Windows系統(tǒng)命令,還將詳細(xì)介紹線(xiàn)程的類(lèi)Timer。本章的學(xué)習(xí)目標(biāo)如下:q 掌握關(guān)機(jī)工具項(xiàng)目;q 掌握如何調(diào)用Windows系統(tǒng)命令;q 理解Timer和TimerTask類(lèi)。8.1 關(guān)機(jī)工具原理關(guān)機(jī)工具項(xiàng)目用來(lái)模擬計(jì)算機(jī)的關(guān)機(jī)功能,即Windows系統(tǒng)的關(guān)機(jī)功能,除此之外還將實(shí)現(xiàn)定時(shí)關(guān)閉計(jì)算機(jī)的功能等。8.1.1 項(xiàng)目結(jié)構(gòu)框架分析對(duì)于關(guān)機(jī)工具項(xiàng)目,除了該項(xiàng)目的界面外,剩下的就是兩個(gè)工具類(lèi)。關(guān)機(jī)工具項(xiàng)目項(xiàng)目目錄如圖8.1所示,該項(xiàng)目中的3個(gè)類(lèi)分別為關(guān)機(jī)工具類(lèi)CutDownTool.java、定時(shí)關(guān)機(jī)工具類(lèi)CountTimeTool.java和關(guān)機(jī)工具項(xiàng)目界面類(lèi)CloseComputer.java。圖8.1 項(xiàng)目目錄8.1.2 項(xiàng)目功能業(yè)務(wù)分析本節(jié)將向讀者介紹整個(gè)項(xiàng)目要實(shí)現(xiàn)的功能。這些功能包括關(guān)機(jī)工具的初始化、按住鼠標(biāo)功能和放開(kāi)鼠標(biāo)后的功能。1關(guān)機(jī)工具初始化當(dāng)運(yùn)行關(guān)機(jī)工具項(xiàng)目中的CloseComputer類(lèi)后,就會(huì)出現(xiàn)如圖8.2所示的初始界面。在該界面中將顯示出實(shí)現(xiàn)關(guān)機(jī)的各種方式。圖8.2 關(guān)機(jī)工具初始界面2倒計(jì)時(shí)關(guān)機(jī)功能關(guān)機(jī)工具項(xiàng)目要實(shí)現(xiàn)倒計(jì)時(shí)關(guān)機(jī)功能,可以在初始化對(duì)話(huà)框中單擊“倒計(jì)時(shí)關(guān)機(jī)”按鈕,彈出時(shí)間輸入對(duì)話(huà)框。在該對(duì)話(huà)框中輸入相應(yīng)的時(shí)間后,單擊“確定”按鈕就會(huì)實(shí)現(xiàn)以輸入框中的時(shí)間倒計(jì)時(shí)關(guān)機(jī)的功能。如果想取消該功能,可以在初始化對(duì)話(huà)框中單擊“取消關(guān)機(jī)”按鈕,彈出確認(rèn)對(duì)話(huà)框。在該對(duì)話(huà)框中單擊“確定”按鈕就可以實(shí)現(xiàn)取消關(guān)機(jī)的功能,具體過(guò)程如圖8.3所示。圖8.3 倒計(jì)時(shí)關(guān)機(jī)的過(guò)程3定時(shí)關(guān)機(jī)功能關(guān)機(jī)工具項(xiàng)目要實(shí)現(xiàn)定時(shí)關(guān)機(jī)功能,可以在初始化對(duì)話(huà)框中單擊“定時(shí)關(guān)機(jī)”按鈕,彈出時(shí)間輸入對(duì)話(huà)框。在該對(duì)話(huà)框中輸入相應(yīng)的時(shí)間后,單擊“確定”按鈕就會(huì)實(shí)現(xiàn)以輸入框中的時(shí)間倒計(jì)時(shí)關(guān)機(jī)功能。如果想取消該功能,可以在初始化對(duì)話(huà)框中單擊“取消關(guān)機(jī)”按鈕,彈出確認(rèn)對(duì)話(huà)框。在該對(duì)話(huà)框中單擊“確定”按鈕就可以實(shí)現(xiàn)取消關(guān)機(jī)的功能,具體過(guò)程如圖8.4所示。圖8.4 定時(shí)關(guān)機(jī)的過(guò)程8.2 關(guān)機(jī)工具的實(shí)現(xiàn)過(guò)程本章通過(guò)調(diào)用系統(tǒng)命令和多線(xiàn)程的相關(guān)知識(shí)來(lái)實(shí)現(xiàn)關(guān)機(jī)工具項(xiàng)目,具體程序架構(gòu)如圖8.5所示,它包含兩個(gè)工具類(lèi)和一個(gè)界面類(lèi)。圖8.5 程序關(guān)系圖8.2.1 關(guān)機(jī)工具的類(lèi)CloseComputer.java類(lèi)用來(lái)實(shí)現(xiàn)“關(guān)機(jī)工具”項(xiàng)目的界面,所以該類(lèi)繼承了類(lèi)JFrame,又由于該類(lèi)需要實(shí)現(xiàn)事件機(jī)制,所以實(shí)現(xiàn)了接口ActionListener。該類(lèi)的具體內(nèi)容如代碼8.1所示,UML如圖8.6所示。圖8.6 關(guān)機(jī)工具類(lèi)圖代碼8.1 關(guān)機(jī)工具類(lèi):CloseComputer.javapublic class CloseComputer extends JFrame implements ActionListener /創(chuàng)建成員變量/創(chuàng)建實(shí)現(xiàn)BorderLayout布局的面板對(duì)象panel_mainprivate JPanel panel_main = new JPanel(new BorderLayout(5, 10);/創(chuàng)建實(shí)現(xiàn)FlowLayout布局的面板對(duì)象panel_subnorthprivate JPanel panel_subnorth = new JPanel(new FlowLayout(3);/創(chuàng)建實(shí)現(xiàn)FlowLayout布局的面板對(duì)象panel_subcenterprivate JPanel panel_subcenter = new JPanel(new FlowLayout(1, 5, 5);/創(chuàng)建了3個(gè)按鈕對(duì)象countdown、time和cancelprivate JButton countdown = new JButton(倒計(jì)時(shí)關(guān)機(jī));private JButton time = new JButton(定時(shí)關(guān)機(jī));private JButton cancel = new JButton(取消關(guān)機(jī));private JLabel tag; /創(chuàng)建標(biāo)簽對(duì)象tagString key; /創(chuàng)建字符串對(duì)象keypublic CloseComputer() /構(gòu)造函數(shù)this.getContentPane().add(panel_main);/添加對(duì)象panel_main到主窗口里/添加對(duì)象panel_subnorth 到對(duì)象panel_main窗口里panel_main.add(panel_subnorth, BorderLayout.NORTH);/添加對(duì)象panel_subcenter到對(duì)象panel_main窗口里panel_main.add(panel_subcenter, BorderLayout.CENTER);/添加標(biāo)簽對(duì)象tag到對(duì)象panel_subnorth里panel_subnorth.add(tag = new JLabel(請(qǐng)選擇關(guān)機(jī)方式:);/添加3個(gè)按鈕到對(duì)象panel_subcenter里panel_subcenter.add(countdown);panel_subcenter.add(time);panel_subcenter.add(cancel);/為3個(gè)按鈕注冊(cè)事件監(jiān)聽(tīng)器countdown.addActionListener(this);time.addActionListener(this);cancel.addActionListener(this);public static void main(String args) throws Exception /主方法CloseComputer frame = new CloseComputer();/創(chuàng)建CloseComputer對(duì)象/設(shè)置窗口關(guān)閉功能frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();frame.setSize(320, 120); /設(shè)置窗口的大小frame.setTitle(關(guān)機(jī)工具); /設(shè)置標(biāo)題frame.setLocation(350, 350);/設(shè)置顯示frame.setVisible(true);frame.setResizable(false);public void countdown() /“倒計(jì)時(shí)關(guān)機(jī)”調(diào)用的方法/獲取輸入的信息key = JOptionPane.showInputDialog(this, 請(qǐng)輸入倒計(jì)時(shí)關(guān)機(jī)剩余的時(shí)間(秒), 輸入框, 1);CountTimeTool.delaytime(Long.parseLong(key);/調(diào)用類(lèi)CountTimeTool的delaytimepublic void time() /“定時(shí)關(guān)機(jī)”調(diào)用的方法Calendar calendar = Calendar.getInstance();/獲取當(dāng)前系統(tǒng)的時(shí)間/獲取當(dāng)前的時(shí)、分和秒int h = calendar.get(Calendar.HOUR);int m = calendar.get(Calendar.MINUTE);int s = calendar.get(Calendar.SECOND); String a = String.valueOf(h);/轉(zhuǎn)換變量h為字符串int hour, minute, secord; /定義輸入的時(shí)、分和秒int類(lèi)型變量String hourtmp, minutetmp, secordtmp;/定義輸入的時(shí)、分和秒string類(lèi)型變量/為變量hourtmp, minutetmp, secordtmp賦值hourtmp = JOptionPane.showInputDialog(this, 請(qǐng)輸入關(guān)機(jī)的小時(shí)(12小時(shí)制), 輸入, 1);minutetmp = JOptionPane.showInputDialog(this, 請(qǐng)輸入關(guān)機(jī)的分鐘, 輸入, 1);secordtmp = JOptionPane.showInputDialog(this, 請(qǐng)輸入關(guān)機(jī)的秒鐘, 輸入, 1);/把Sting類(lèi)型變量轉(zhuǎn)換成int類(lèi)型變量hour = Integer.parseInt(hourtmp);minute = Integer.parseInt(minutetmp);secord = Integer.parseInt(secordtmp);/通過(guò)調(diào)用timesum()方法,計(jì)算出當(dāng)前系統(tǒng)的時(shí)間currently_time和輸入的時(shí)間set_timelong set_time = timesum(hour, minute, secord);long currently_time = timesum(h, m, s);/獲取設(shè)置時(shí)間與系統(tǒng)時(shí)間之間的差long discrepancy_time = set_time - currently_time;if (discrepancy_time 0) /當(dāng)設(shè)置時(shí)間比系統(tǒng)時(shí)間早時(shí)try /執(zhí)行關(guān)閉功能Runtime.getRuntime().exec(shutdown -s); catch (IOException e) e.printStackTrace(); else /調(diào)用類(lèi)CountTimeTool的delaytime()方法CountTimeTool.delaytime(discrepancy_time);JOptionPane.showMessageDialog(this, 恭喜你,設(shè)置成功!, 確認(rèn), 2);/計(jì)算出時(shí)間總和,并返回public int timesum(int h, int m, int s) /把時(shí)和分變量分別轉(zhuǎn)換成秒int sum = h * 3600 + m * 60 + s;return sum; public void cancel() /“取消關(guān)機(jī)”調(diào)用的方法try /顯示信息框JOptionPane.showMessageDialog(this, 你已經(jīng)成功取消了關(guān)機(jī)操作!, 消息, 2);/執(zhí)行取消關(guān)閉計(jì)算機(jī)命令Runtime.getRuntime().exec(shutdown -a); catch (IOException e) public void actionPerformed(ActionEvent eAction) /事件監(jiān)聽(tīng)事件String ActionCommand = eAction.getActionCommand();if (eAction.getSource() instanceof JButton) /發(fā)生事件的組件是JButton類(lèi)型if (倒計(jì)時(shí)關(guān)機(jī).equals(ActionCommand) /如果為“倒計(jì)時(shí)關(guān)機(jī)”按鈕countdown(); /調(diào)用countdown()方法if (定時(shí)關(guān)機(jī).equals(ActionCommand) /如果為“定時(shí)關(guān)機(jī)”按鈕time(); /調(diào)用time()方法if (取消關(guān)機(jī).equals(ActionCommand) /如果為“取消關(guān)機(jī)”按鈕cancel(); /調(diào)用cancel()方法【代碼解析】q 上述代碼實(shí)現(xiàn)了關(guān)機(jī)工具項(xiàng)目界面,該用戶(hù)界面涉及的具體容器、對(duì)象和布局如圖8.7所示。q 上述代碼中,語(yǔ)句“Runtime.getRuntime().exec(shutdown -s)”的意思就是啟動(dòng)一個(gè)新的進(jìn)程執(zhí)行shutdown -s命令。該命令的含義為關(guān)閉計(jì)算機(jī),而命令shutdown -a的含義為取消關(guān)閉計(jì)算機(jī)。圖8.7 布局8.2.2 關(guān)機(jī)工具的工具類(lèi)CutDownTool.java類(lèi)主要用來(lái)實(shí)現(xiàn)關(guān)閉計(jì)算機(jī)的功能,由于該類(lèi)需要被定時(shí)調(diào)用,所以繼承了TimerTask類(lèi),該類(lèi)的具體內(nèi)容如代碼8.2所示。代碼8.2 關(guān)機(jī)工具類(lèi):CutDownTool.javapublic class CutDownTool extends TimerTask /繼承了TimerTask類(lèi)public void run() /重寫(xiě)run()方法try /執(zhí)行關(guān)閉計(jì)算機(jī)命令Runtime.getRuntime().exec(shutdown -s); catch (IOException e) e.printStackTrace();【代碼解析】在上述代碼中,首先繼承了TimerTask類(lèi),然后重寫(xiě)該類(lèi)的run()方法,在該方法中通過(guò)執(zhí)行命令shutdown-s實(shí)現(xiàn)了關(guān)閉計(jì)算機(jī)的功能。CutDownTool.java類(lèi)主要用來(lái)實(shí)現(xiàn)定時(shí)關(guān)閉計(jì)算機(jī)的功能,即在一定時(shí)間后執(zhí)行CutDownTool類(lèi),該類(lèi)的具體內(nèi)容如代碼8.3所示。代碼8.3 定時(shí)關(guān)機(jī)工具類(lèi):CountTimeTool.javapublic class CountTimeTool public static void delaytime(long dt) long delay = 1000; /間隔變量delayTimer timer = new Timer(); /創(chuàng)建Timer變量CutDownTool w1 = new CutDownTool();/創(chuàng)建CutDownTool對(duì)象timer.schedule(w1, delay * dt); /在delay*dt時(shí)間段后執(zhí)行w1【代碼解析】上述代碼中為了實(shí)現(xiàn)定時(shí)的效果,調(diào)用了類(lèi)Timer的schedule()方法,表示w1被安排在delay*dt指定的時(shí)間后執(zhí)行。8.3 知識(shí)點(diǎn)擴(kuò)展關(guān)機(jī)工具項(xiàng)目涉及的知識(shí)在關(guān)機(jī)工具項(xiàng)目中,除了涉及用戶(hù)界面的知識(shí)外,還通過(guò)Timer和TimerTask類(lèi)實(shí)現(xiàn)了多線(xiàn)程,同時(shí)還通過(guò)調(diào)用系統(tǒng)命令實(shí)現(xiàn)了計(jì)算機(jī)關(guān)閉功能。本節(jié)除了詳細(xì)介紹線(xiàn)程的類(lèi)Timer和TimerTask外,還將詳細(xì)講解系統(tǒng)命令Shutdown。8.3.1 Timer和TimerTask類(lèi)在Java語(yǔ)言中如果想實(shí)現(xiàn)每隔一段時(shí)間去執(zhí)行某個(gè)任務(wù),除了可以使用線(xiàn)程類(lèi)Thread外,還可以使用包java.util中的類(lèi)Timer和TimerTask。對(duì)于前者首先需要?jiǎng)?chuàng)建后臺(tái)進(jìn)程,然后讓其每隔一段時(shí)間執(zhí)行,具體實(shí)現(xiàn)時(shí)比較麻煩。對(duì)于后者,只需要在TimerTask類(lèi)的run()方法中實(shí)現(xiàn)任務(wù),然后Timer類(lèi)就會(huì)安排其每隔一段時(shí)間執(zhí)行,具體實(shí)現(xiàn)時(shí)比較簡(jiǎn)單。所謂Timer,就是一種定時(shí)器工具,用來(lái)在一個(gè)后臺(tái)線(xiàn)程計(jì)劃執(zhí)行指定任務(wù)。它可以計(jì)劃執(zhí)行該任務(wù)一次或反復(fù)多次。所謂TimerTask,其實(shí)質(zhì)是一個(gè)抽象類(lèi),其子類(lèi)代表一個(gè)可以被Timer計(jì)劃的任務(wù)。下面通過(guò)一個(gè)具體的類(lèi)TimerTest來(lái)講解Timer和TimerTask類(lèi)的使用,該類(lèi)的具體內(nèi)容如代碼8.4所示。代碼8.4 測(cè)試類(lèi):TimerTest.javapublic class TimerTest extends TimerTask /創(chuàng)建成員變量String index; /創(chuàng)建一個(gè)字符串變量Timer myTimer = new Timer(); /創(chuàng)建一個(gè)Timer對(duì)象public TimerTest(String index) /構(gòu)造函數(shù)this.index = index;public void run() /重寫(xiě)run()方法System.out.println(index);/反復(fù)執(zhí)行的任務(wù)public void start(int delay, int internal) /實(shí)現(xiàn)反復(fù)執(zhí)行功能/在delay * 1000時(shí)間后開(kāi)始執(zhí)行TimerTest對(duì)象,執(zhí)行后每隔internal * 1000反復(fù)執(zhí)行myTimer.schedule(this, delay * 1000, internal * 1000); public void end() myTimer.cancel(); /調(diào)用cancel()方法結(jié)束public static void main(String args) /主方法/創(chuàng)建和設(shè)置myTask1對(duì)象TimerTest myTask1 = new TimerTest(線(xiàn)程1執(zhí)行);myTask1.start(0, 3); /調(diào)用start()方法/創(chuàng)建和設(shè)置myTask2對(duì)象TimerTest myTask2 = new TimerTest(線(xiàn)程2執(zhí)行);myTask2.start(0, 1); /調(diào)用start()方法try Thread.sleep(6000); /使線(xiàn)程休眠6秒 catch (InterruptedException e) /結(jié)束myTask1.end();myTask2.end();運(yùn)行TimerTest.java類(lèi),其控制臺(tái)窗口如圖8.8所示。圖8.8 運(yùn)行結(jié)果【代碼解析】q 在上述代碼的眾多方法中,由于繼承了TimerTask類(lèi),所以需要重寫(xiě)run()方法實(shí)現(xiàn)業(yè)務(wù)功能;在啟動(dòng)線(xiàn)程的start()方法中,通過(guò)調(diào)用Timer類(lèi)的schedule()方法執(zhí)行TimerTest對(duì)象;在結(jié)束線(xiàn)程的end()方法中,通過(guò)調(diào)用Timer類(lèi)的cancel()方法結(jié)束線(xiàn)程。q 在上述代碼的主方法main()中,首先創(chuàng)建了兩個(gè)線(xiàn)程對(duì)象myTask1和myTask2,然后通過(guò)start()方法啟動(dòng)線(xiàn)程,通過(guò)end()方法結(jié)束線(xiàn)程,在具體調(diào)用這兩個(gè)方法之間,通過(guò)Thread.sleep()方法實(shí)現(xiàn)當(dāng)前線(xiàn)程休眠一段時(shí)間。最后,通過(guò)查看API幫助文檔可以發(fā)現(xiàn),如果想實(shí)現(xiàn)執(zhí)行計(jì)劃、定時(shí)任務(wù),首先需要繼承TimerTask類(lèi)并重寫(xiě)該類(lèi)的run()方法來(lái)實(shí)現(xiàn)任務(wù)功能,然后通過(guò)調(diào)用Timer類(lèi)的schedule()方法執(zhí)行TimerTask類(lèi)對(duì)象。詳細(xì)介紹如下。1TimerTask類(lèi)對(duì)于TimerTask類(lèi),其是擴(kuò)展了Object并實(shí)現(xiàn)了Runnable接口的抽象類(lèi),因此在具體編程時(shí),可以在public void run()方法中編寫(xiě)具體的執(zhí)行任務(wù)。該類(lèi)擁有幾個(gè)重要方法,如下所示。(1)public boolean cancel()該方法用來(lái)終止計(jì)時(shí)器任務(wù)的執(zhí)行運(yùn)行。%注意:Timer類(lèi)要求循環(huán)執(zhí)行任務(wù)(TimerTask任務(wù))時(shí),如果該對(duì)象正在執(zhí)行,則會(huì)在執(zhí)行完之后不會(huì)再循環(huán)執(zhí)行;如果還未執(zhí)行或處于停歇期,則不會(huì)執(zhí)行。(2)public abstract void run()該方法為計(jì)時(shí)器任務(wù)要執(zhí)行的操作。(3)public long scheduledExecutionTime()該方法用來(lái)返回計(jì)時(shí)器任務(wù)被安排最后執(zhí)行的時(shí)間,一般用來(lái)確定計(jì)時(shí)器任務(wù)的運(yùn)行是否足夠及時(shí),執(zhí)行是否正當(dāng)。2Timer類(lèi)對(duì)于Timer類(lèi),主要用來(lái)控制TimerTask類(lèi)的任務(wù)執(zhí)行一次或者定期重復(fù)執(zhí)行,該類(lèi)擁有4個(gè)構(gòu)造函數(shù),分別如下。(1)Timer()該構(gòu)造函數(shù)用來(lái)創(chuàng)建一個(gè)默認(rèn)的計(jì)時(shí)器。(2)Timer(boolean isDaemon)參數(shù)isDaemon指定線(xiàn)程的守護(hù),創(chuàng)建一個(gè)指定守護(hù)線(xiàn)程的計(jì)時(shí)器。%注意:當(dāng)參數(shù)isDaemon為true時(shí),該計(jì)時(shí)器對(duì)象相關(guān)線(xiàn)程為后臺(tái)進(jìn)程線(xiàn)程,根據(jù)線(xiàn)程知識(shí)可以知道,如果應(yīng)用程序中還有程序繼續(xù)運(yùn)行,后臺(tái)線(xiàn)程進(jìn)程就不會(huì)停止 執(zhí)行。(3)Timer(String name)參數(shù)name為線(xiàn)程的名字,用來(lái)創(chuàng)建一個(gè)指定名稱(chēng)的相關(guān)線(xiàn)程的計(jì)時(shí)器。(4)Timer(String name, boolean isDaemon)該函數(shù)用來(lái)創(chuàng)建一個(gè)新計(jì)時(shí)器,不僅指定相關(guān)線(xiàn)程的名稱(chēng),而且還指定其為后臺(tái)線(xiàn)程。在具體創(chuàng)建計(jì)時(shí)器對(duì)象時(shí),不推薦使用Timer timer = new Timer(true)語(yǔ)句。因?yàn)檫@種方式創(chuàng)建的計(jì)時(shí)器對(duì)象,在應(yīng)用程序結(jié)束后會(huì)自動(dòng)結(jié)束,非常不利于使用。除了構(gòu)造函數(shù)外,該Timer類(lèi)還擁有其他幾個(gè)重要方法,其中最重要的方法就是各種重載的schedule()方法和scheduleAtFixedRate()方法,分別如下:(1)public void schedule(TimerTask task,Date time)參數(shù)task為所計(jì)時(shí)器任務(wù)對(duì)象,參數(shù)time為Data類(lèi)型對(duì)象,該方法用來(lái)實(shí)現(xiàn)在指定的時(shí)間后執(zhí)行計(jì)時(shí)器任務(wù)。%注意:如果參數(shù)time為過(guò)去時(shí),則任務(wù)task對(duì)象會(huì)立刻執(zhí)行。(2)public void schedule(TimerTask task, long delay)參數(shù)delay為long類(lèi)型,該方法用來(lái)實(shí)現(xiàn)在指定的時(shí)間(毫秒)后執(zhí)行計(jì)時(shí)器任務(wù)。(3)public void schedule(TimerTask task, Date firstTime, long period)參數(shù)firstTime為Date類(lèi)型,表示第一次執(zhí)行的時(shí)間;參數(shù)period為long類(lèi)型,表示間隔的時(shí)間(毫秒);該方法用來(lái)在firstTime時(shí)間后執(zhí)行任務(wù)task,同時(shí)在第一次執(zhí)行后每隔period(毫秒)反復(fù)執(zhí)行。每一次重復(fù)的間隔時(shí)間會(huì)因?yàn)榍耙淮蝨ask的執(zhí)行時(shí)間受到影響。(4)public void schedule(TimerTask task,long delay, long period)參數(shù)delay為long類(lèi)型,該方法用來(lái)在firstTime時(shí)間(毫秒)后執(zhí)行任務(wù)task,同時(shí)在第一次執(zhí)行后每隔period(毫秒)反復(fù)執(zhí)行。每一次重復(fù)的間隔時(shí)間會(huì)因?yàn)榍耙淮蝨ask的執(zhí)行時(shí)間受到影響。%注意:當(dāng)表示時(shí)間的參數(shù)為long類(lèi)型時(shí),表示毫秒。由于long類(lèi)型的時(shí)間并不能保證與時(shí)鐘準(zhǔn)確同步,所以擁有l(wèi)ong類(lèi)型的時(shí)間參數(shù)適合短期的保持頻率。(5)public void scheduleAtFixedRate(TimerTask task,Date firstTime, long period)參數(shù)firstTime為Date類(lèi)型,該方法用來(lái)在firstTime時(shí)間后執(zhí)行任務(wù)task,同時(shí)在第一次執(zhí)行后每隔period(毫秒)反復(fù)執(zhí)行。每一次重復(fù)的間隔時(shí)間不會(huì)因?yàn)榍耙淮蝨ask的執(zhí)行時(shí)間受到影響。(6)public void scheduleAtFixedRate(TimerTask task,long delay,long period)參數(shù)firstTime為long類(lèi)型,該方法用來(lái)在delay時(shí)間后執(zhí)行任務(wù)task,同時(shí)在第一次執(zhí)行后每隔period(毫秒)反復(fù)執(zhí)行。每一次重復(fù)的間隔時(shí)間不會(huì)因?yàn)榍耙淮蝨ask的執(zhí)行時(shí)間受到影響。當(dāng)需要反復(fù)執(zhí)行的任務(wù)時(shí),如果注重任務(wù)執(zhí)行的平滑度,那么需要使用schedule()方法,如果注重任務(wù)執(zhí)行的頻度,那么需要使用scheduleAtFixedRate()方法。例如,當(dāng)使用schedule()方法時(shí),意味著所有計(jì)時(shí)器任務(wù)之間的時(shí)間間隔至少為1秒,即如果有一個(gè)計(jì)時(shí)器任務(wù)因?yàn)槟撤N原因遲到了(未按計(jì)劃執(zhí)行),那么余下的所有計(jì)時(shí)器任務(wù)都要延時(shí)執(zhí)行。當(dāng)使用scheduleAtFixedRate()方法時(shí),如果有一個(gè)計(jì)時(shí)器任務(wù)因?yàn)槟撤N原因遲到了(未按計(jì)劃執(zhí)行),那么后面余下的所有計(jì)時(shí)器任務(wù)還會(huì)以固定的間隔時(shí)間執(zhí)行。即schedule()方法會(huì)實(shí)現(xiàn)固定延遲執(zhí)行功能,而scheduleAtFixedRate()方法會(huì)實(shí)現(xiàn)固定速率執(zhí)行功能。最后還存在一個(gè)關(guān)閉Timer類(lèi)的對(duì)象方法,如下所示。public void cancel()該方法用來(lái)終止Timer的功能執(zhí)行。%注意:當(dāng)執(zhí)行該方法后,雖然不會(huì)對(duì)正在執(zhí)行的任務(wù)有影響,但是卻不會(huì)再分配其他 任務(wù)。8.3.2 shutdown命令在Windows系統(tǒng)中,shutdown命令能夠?qū)崿F(xiàn)關(guān)閉或重新啟動(dòng)一臺(tái)本地或遠(yuǎn)程計(jì)算機(jī)的功能。本節(jié)不僅講解了shutdown命令,而且還講解了實(shí)現(xiàn)該命令的程序shutdown.exe。對(duì)于shutdown命令,其具體語(yǔ)法如下:shutdown /i | /l | /s | /r | /a | /p | /h | /e /f /m /ComputerName /t XXX /d p:XX:YY/cComment上述語(yǔ)法中各個(gè)參數(shù)的含義如表8.1所示。表8.1 參數(shù)含義命 令 參 數(shù)含 義/i顯示“遠(yuǎn)程關(guān)機(jī)對(duì)話(huà)框”/l立即注銷(xiāo)當(dāng)前用戶(hù)/s關(guān)閉計(jì)算機(jī)/r關(guān)機(jī)后重新啟動(dòng)計(jì)算機(jī)/a取消關(guān)機(jī)操作/p僅關(guān)閉本地計(jì)算機(jī)(而不是遠(yuǎn)程計(jì)算機(jī)),沒(méi)有超時(shí)期或警告/h使本地計(jì)算機(jī)處于休眠狀態(tài)(如果已啟用休眠)/e強(qiáng)制關(guān)閉正在運(yùn)行的應(yīng)用程序而不提前警告用戶(hù)/f強(qiáng)制關(guān)閉正在運(yùn)行的應(yīng)用程序而不提前警告用戶(hù)/m /ComputerName指定目標(biāo)計(jì)算機(jī)/t XXX將重新啟動(dòng)或關(guān)機(jī)前超時(shí)期限或延遲設(shè)置為XXX秒/d p:XX:YY列出系統(tǒng)重新啟動(dòng)、關(guān)機(jī)或關(guān)閉電源的原因/cComment對(duì)關(guān)機(jī)原因做出詳細(xì)注釋%注意:在具體使用shutdown命令時(shí),用戶(hù)必須是Administrators組的成員才能對(duì)本地或遠(yuǎn)程管理計(jì)算機(jī)的意外關(guān)機(jī)進(jìn)行批注。在Windows XP系統(tǒng)中存在一個(gè)名為shutdown.exe的程序,該程序的具體目錄如圖8.9所示,當(dāng)在運(yùn)行shutdown命令時(shí),其實(shí)就是執(zhí)行該程序。圖8.9 文件目錄下面介紹shutdown命令的幾個(gè)具體實(shí)例。(1)如果想讓計(jì)算機(jī)在23:00關(guān)機(jī),可以在運(yùn)行對(duì)話(huà)框中輸入如下命令:at 23:00 shutdown s當(dāng)執(zhí)行上述命令后,只要到了23點(diǎn),計(jì)算機(jī)就會(huì)出現(xiàn)“系統(tǒng)關(guān)機(jī)”對(duì)話(huà)框,默認(rèn)有30秒鐘的倒計(jì)時(shí)來(lái)提示保存工作。(2)如果想在1小時(shí)后自動(dòng)關(guān)閉計(jì)算機(jī),即實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉功能,可以在運(yùn)行對(duì)話(huà)框中輸入如下命令:shutdown s t 3600之所以為3600,是因?yàn)橐环昼姙?0秒,而1小時(shí)共3600秒。(3)如果在倒計(jì)時(shí)自動(dòng)關(guān)機(jī)過(guò)程中想取消倒計(jì)時(shí)自動(dòng)關(guān)機(jī),可以在運(yùn)行對(duì)話(huà)框中輸入如下命令:shutdown a(4)如果想打開(kāi)“遠(yuǎn)程關(guān)機(jī)對(duì)話(huà)框”,如圖8.10所示,對(duì)自動(dòng)關(guān)機(jī)進(jìn)行設(shè)置,可以在運(yùn)行對(duì)話(huà)框中輸入如下命令:圖8.10 遠(yuǎn)程關(guān)機(jī)對(duì)話(huà)框shutdown -i(5)如果想顯示shutdown命令的幫助信息,如圖8.11和圖8.12所示,可以在運(yùn)行對(duì)話(huà)框中輸入如下命令:shutdown或shutdown /? 圖8.11 顯示幫助信息 圖8.12 顯示幫助信息8.3.3 通過(guò)shutdown命令實(shí)現(xiàn)網(wǎng)絡(luò)遠(yuǎn)程關(guān)機(jī)平時(shí)經(jīng)常會(huì)遇到這種情況,公司下班后常有很多員工不關(guān)電腦,領(lǐng)導(dǎo)發(fā)現(xiàn)后要求解決這個(gè)問(wèn)題。假如你是網(wǎng)管該如何辦呢?有些網(wǎng)管會(huì)到每個(gè)辦公
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年醫(yī)療設(shè)備使用及維護(hù)管理協(xié)議
- 2025年挖掘機(jī)改裝與定制服務(wù)合同范本3篇
- 2025版尾款支付與市場(chǎng)推廣效果評(píng)估協(xié)議3篇
- 2025年度醫(yī)院病理科外包服務(wù)承包管理協(xié)議4篇
- 二零二五版離異家庭子女撫養(yǎng)權(quán)調(diào)整與生活費(fèi)用分擔(dān)合同3篇
- 2024鐵精粉原材料采購(gòu)與銷(xiāo)售合作協(xié)議范本3篇
- 二零二五版房地產(chǎn)估價(jià)與房地產(chǎn)稅收籌劃服務(wù)協(xié)議3篇
- 二零二五年度酒店人力資源部員工勞動(dòng)合同與招聘服務(wù)合同
- 二零二五年度心理咨詢(xún)?cè)噸徸稍?xún)師合同
- 2025年度美甲店品牌授權(quán)與區(qū)域保護(hù)合作協(xié)議
- 南通市2025屆高三第一次調(diào)研測(cè)試(一模)地理試卷(含答案 )
- 2025年上海市閔行區(qū)中考數(shù)學(xué)一模試卷
- 銷(xiāo)售提成對(duì)賭協(xié)議書(shū)范本 3篇
- 勞務(wù)派遣招標(biāo)文件范本
- 信息安全意識(shí)培訓(xùn)課件
- Python試題庫(kù)(附參考答案)
- 碳排放管理員 (碳排放核查員) 理論知識(shí)考核要素細(xì)目表三級(jí)
- 2024年河北省中考數(shù)學(xué)試題(含答案解析)
- 小學(xué)二年級(jí)數(shù)學(xué)口算練習(xí)題1000道
- 納布啡在產(chǎn)科及分娩鎮(zhèn)痛的應(yīng)用
- DZ/T 0462.4-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第4部分:銅等12種有色金屬礦產(chǎn)(正式版)
評(píng)論
0/150
提交評(píng)論