java實現(xiàn)電腦定時關(guān)機的方法_第1頁
java實現(xiàn)電腦定時關(guān)機的方法_第2頁
java實現(xiàn)電腦定時關(guān)機的方法_第3頁
java實現(xiàn)電腦定時關(guān)機的方法_第4頁
java實現(xiàn)電腦定時關(guān)機的方法_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

java實現(xiàn)電腦定時關(guān)機的方法一、問題:最近想找個軟件來控制電腦的關(guān)機時間,在網(wǎng)上找了幾個,都是可視化界面的可以設(shè)置具體的關(guān)機時間的軟件。由于我想編寫的關(guān)機程序是運行在別人機器上,只能讓該機器在晚上17點到23點25分才上網(wǎng),到了23點25分就可以自動關(guān)機。為了讓別人感覺不到這個軟件的“存在”(免得使用者自己關(guān)閉定時關(guān)機軟件),所以我想把關(guān)機軟件注冊為服務(wù)的方式,運行在后臺。這里介紹下如何利用javaService軟件把java程序注冊為windows服務(wù)。二、實現(xiàn)方法:1.利用javaService注冊java程序為windows服務(wù)①下載javaService訪問網(wǎng)址/下載windows版本的javaService文件,我下載的是JavaService-2.0.10.rar,目前最新的版本就是“2.0.10”。②安裝javaService解壓我們下載下來的javaServices到一個目錄,我是解壓到目錄“D:/software/JavaService-2.0.10”下(解壓到任何目錄都可以,最好別解壓到中文目錄,省的出現(xiàn)問題)③編寫定時關(guān)機代碼1)類的名字為:com.test.timer.TimerShutDownWindows2)把編寫后的java文件導(dǎo)出為class的'形式,把導(dǎo)出的類放到目錄“D:/software/JavaService-2.0.10/classes/com/test/timer”下。也就是把導(dǎo)出的com包放到“D:/software/JavaService-2.0.10/classes”目錄下。④注冊java程序為windows服務(wù)進入“D:/software/JavaService-2.0.10“目錄,執(zhí)行如下命令:代碼如下:JavaService.exe-installMyShutDownService"%JAVA_HOME%"/jre/bin/server/jvm.dll-Djava.class.path="%JAVA_HOME%"/lib/tools.jar;D:/software/JavaService-2.0.10/classes-startcom.test.timer.TimerShutDownWindows其中“-install“后面的參數(shù)為服務(wù)的名稱,“-start”參數(shù)后邊是要啟動的類名,“Djava.class.path”后面參數(shù)中的“D:/software/JavaService-2.0.10/classe”地址是我的“TimerShutDownWindows”類存放的路徑,實際應(yīng)用中修改為自己的classPath即可。這里需要注意幾點:1)“%JAVA_HOME%”jdk目錄,如果沒有配置jdk目錄,則替換為jdk的實際絕對地址。2)-Djava.class.path是必須的,因為服務(wù)啟動的時候無法訪問系統(tǒng)的CLASSPATH變量,所以必須在這里聲明;如果jar比較多,為避免寫的命令過長,我們可以使用“-Djava.ext.dirs=jars所在目錄”參數(shù)。3)服務(wù)添加之后,可以在命令行中敲入“services.msc”命令來查看所有服務(wù),并可以對服務(wù)的啟動類型(自動啟動還是手動啟動等)進行修改。⑤測試1)啟動服務(wù)當我們注冊完服務(wù)后,我們可以通過命令“netstartMyShutDownService”來啟動該服務(wù),服務(wù)啟動后會在D盤根目錄生成my_shutdown.log日志文件。2)關(guān)閉服務(wù)如果我們要關(guān)閉服務(wù),可以通過命令“netstopMyShutDownService”來關(guān)閉該服務(wù)。3)刪除服務(wù)當我們想刪除該服務(wù)時,可以使用命令“scdeleteMyShutDownService”來刪除該服務(wù)。2.定時關(guān)機代碼代碼如下:packagecom.test.timer;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.io.PrintWriter;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;publicclassTimerShutDownWindows{/*檢測是否需要關(guān)機的時間間隔*/privatestaticlongm_nDetectInterval=5000;/*記錄上次檢測的時間,以毫秒為單位*/privatestaticlongm_lLastMilliSeconds=0;/*可以使用電腦的最小小時*/privatestaticintm_nUsePCMinHour=17;/*可以使用電腦的最大小時*/privatestaticintm_nUseComputerMaxHour=23;/*如果分鐘超過這個時間,則關(guān)機計算機*/privatestaticintm_nMinutes=25;/*記錄日志的文件的保存位置*/privatestaticStringm_sLogFile="D:"+File.separator+"my_shutdown.log";/*記錄當前系統(tǒng)是否已經(jīng)啟動自動關(guān)閉程序*/privatestaticbooleanbHasShutDownPC=false;/***@paramargs*/publicstaticvoidmain(String[]args){//1.單獨開啟一個線程去檢測ThreadaThread=newThread(newTimerDetector());aThread.start();}/***定義內(nèi)部類**@authorAdministrator**/staticclassTimerDetectorimplementsRunnable{/**(non-Javadoc)**@seejava.lang.Runnable#run()*/publicvoidrun(){//1.獲取日志文件PrintWriterout=null;SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");try{out=newPrintWriter(newFileWriter(m_sLogFile,true),true);}catch(IOExceptione1){out=null;e1.printStackTrace();}//2.記錄服務(wù)啟動時間appendLog(out,"服務(wù)啟動時間:"+df.format(newDate()));while(true){//1.判斷當前系統(tǒng)時間是否被修改過booleanbShoudShutDownPC=validateShoudShutDownPC(out);if(bShoudShutDownPC){//驗證沒通過,強制關(guān)機exectueShutDown(out);}else{bHasShutDownPC=false;}//2.當前線程休眠下try{Thread.sleep(m_nDetectInterval);}catch(InterruptedExceptione){appendLog(out,e.getMessage());}}}/***驗證當前時間是否是需要關(guān)機的時間**@return*/privatebooleanvalidateShoudShutDownPC(PrintWriter_out){//1.判斷是否修改了系統(tǒng)時間booleanbHasModifySystemTime=detectModifySytemTime(_out);appendLog(_out,"bHasModifySystemTime:"+bHasModifySystemTime);if(bHasModifySystemTime){returnbHasModifySystemTime;}//2.沒有修改系統(tǒng)時間,則判斷當前時間是否超過了指定的時間booleanbShoudSleep=nowIsSleepTime();appendLog(_out,"bShoudSleep:"+bShoudSleep);if(bShoudSleep){returnbShoudSleep;}returnfalse;}/***判斷當前時間是否應(yīng)該休息的時間**@return*/privatebooleannowIsSleepTime(){//1.獲取當前小時和分鐘CalendaraCalendar=Calendar.getInstance();intnHour=aCalendar.get(Calendar.HOUR_OF_DAY);intnMinute=aCalendar.get(Calendar.MINUTE);//2.判斷當前小時是否在可以使用PC的時間內(nèi),最大小時為23if(nHour<m_nUsePCMinHour){returntrue;}//23點需要單獨判斷,超過23點30就應(yīng)該休息if((nHour>=m_nUseComputerMaxHour)&&(nMinute>=m_nMinutes)){returntrue;}//3.非休息時間returnfalse;}/***判斷是否有人修改了系統(tǒng)時間,如果有人修改了系統(tǒng)時間返回true,*否則返回false**@return*/privatebooleandetectModifySytemTime(PrintWriter_out){//1.第一次檢測系統(tǒng)時間if(m_lLastMilliSeconds==0){m_lLastMilliSeconds=System.currentTimeMillis();returnfalse;}//2.檢測兩次時間的差值longlInteral=System.currentTimeMillis()-m_lLastMilliSeconds;lInteral=Math.abs(lInteral);//3.判斷兩次的時間間隔,兩次結(jié)果不一定完全等于m_nDetectInterval,允許誤差為1分鐘longlMaxInterval=m_nDetectInterval+60*1000;appendLog(_out,"lInteral:::"+lInteral);appendLog(_out,"lMaxInterval:::"+lMaxInterval);if(lInteral>lMaxInterval){//有人修改了系統(tǒng)時間,強制關(guān)機returntrue;}//4.只有沒人修改時間才記錄上次檢測時間m_lLastMilliSeconds=System.currentTimeMillis();returnfalse;}/***在指定的流中寫入日志信息**@param_outWriter*@param_sAppendContent*/privatevoidappendLog(PrintWriter_outWriter,String_sAppendContent){if(_outWriter==null){return;}_outWriter.println(_sAppendContent);}/***執(zhí)行關(guān)機命令*/privatevoidexectueShutDown(PrintWriter_out){if(bHasShutDownPC){SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");appendLog(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論