亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java實現電腦定時關機的方法

2019-11-26 15:21:20
字體:
來源:轉載
供稿:網友

本文實例講述了java如何注冊成windows服務程序及一個簡單的java定時關機程序代碼,分享給大家供大家參考。具體方法如下:

一、問題:

最近想找個軟件來控制電腦的關機時間,在網上找了幾個,都是可視化界面的可以設置具體的關機時間的軟件。由于我想編寫的關機程序是運行在別人機器上,只能讓該機器在晚上17 點到23 點25 分才上網,到了23 點25 分就可以自動關機。為了讓別人感覺不到這個軟件的“存在”(免得使用者自己關閉定時關機軟件),所以我想把關機軟件注冊為服務的方式,運行在后臺。這里介紹下如何利用javaService 軟件把java 程序注冊為windows 服務。

二、實現方法:

1. 利用javaService 注冊java 程序為windows 服務

① 下載javaService
訪問網址http://javaservice.objectweb.org/ 下載windows 版本的javaService 文件,我下載的是JavaService-2.0.10.rar ,目前最新的版本就是“2.0.10 ”。

② 安裝javaService
解壓我們下載下來的javaServices 到一個目錄,我是解壓到目錄“D:/software/JavaService-2.0.10 ”下(解壓到任何目錄都可以,最好別解壓到中文目錄,省的出現問題 )

③ 編寫定時關機代碼
1)   類的名字為:
com.test.timer.TimerShutDownWindows
2)   把編寫后的java 文件導出為class 的形式,把導出的類放到目錄“D:/software/JavaService-2.0.10/classes/com/test/timer ”下。也就是把導出的com 包放到
“D:/software/JavaService-2.0.10/classes” 目錄下。

④ 注冊java 程序為windows 服務
進入“D:/software/JavaService-2.0.10 “目錄,執行如下命令:

復制代碼 代碼如下:
JavaService.exe -install MyShutDownService "%JAVA_HOME%"/jre/bin/server/jvm.dll -Djava.class.path="%JAVA_HOME%"/lib/tools.jar;D:/software/JavaService-2.0.10/classes -start com.test.timer.TimerShutDownWindows

其中“-install “后面的參數為服務的名稱,“-start ”參數后邊是要啟動的類名,“Djava.class.path ”后面參數中的
“D:/software/JavaService-2.0.10/classe ”地址是我的“TimerShutDownWindows ”類存放的路徑,實際應用中修改為自己的classPath 即可。

這里需要注意幾點:

1)   “%JAVA_HOME% ”jdk 目錄,如果沒有配置jdk 目錄,則替換為jdk 的實際絕對地址。

2)   -Djava.class.path 是必須的,因為服務啟動的時候無法訪問系統的CLASSPATH 變量,所以必須在這里聲明;如果jar 比較多,為避免寫的命令過長,我們可以使用“-Djava.ext.dirs=jars 所在目錄”參數。

3)   服務添加之后,可以在命令行中敲入“services.msc ”命令來查看所有服務,并可以對服務的啟動類型(自動啟動還是手動啟動等)進行修改。

⑤ 測試

1)  啟動服務

當我們注冊完服務后,我們可以通過命令“net start MyShutDownService ”來啟動該服務,服務啟動后會在D 盤根目錄生成my_shutdown.log 日志文件。

2)  關閉服務

如果我們要關閉服務,可以通過命令“net stop MyShutDownService ”來關閉該服務。

3)  刪除服務

當我們想刪除該服務時,可以使用命令“sc delete MyShutDownService ”來刪除該服務。

2. 定時關機代碼

復制代碼 代碼如下:
package com.test.timer;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TimerShutDownWindows {
    /* 檢測是否需要關機的時間間隔 */
    private static long m_nDetectInterval = 5000;
    /* 記錄上次檢測的時間,以毫秒為單位 */
    private static long m_lLastMilliSeconds = 0;
    /* 可以使用電腦的最小小時 */
    private static int m_nUsePCMinHour = 17;
    /* 可以使用電腦的最大小時 */
    private static int m_nUseComputerMaxHour = 23;
    /* 如果分鐘超過這個時間,則關機計算機 */
    private static int m_nMinutes = 25;
    /* 記錄日志的文件的保存位置 */
    private static String m_sLogFile = "D:" + File.separator
           + "my_shutdown.log";
    /* 記錄當前系統是否已經啟動自動關閉程序 */
    private static boolean bHasShutDownPC = false;
    /**
      * @param args
      */
    public static void main(String[] args) {
       // 1. 單獨開啟一個線程去檢測
       Thread aThread = new Thread(new TimerDetector());
       aThread.start();
    }
    /**
      * 定義內部類
      *
      * @author Administrator
      *
      */
    static class TimerDetector implements Runnable {
       /*
         * (non-Javadoc)
         *
         * @see java.lang.Runnable#run()
         */
       public void run() {
           // 1. 獲取日志文件
           PrintWriter out = null;
           SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           try {
              out = new PrintWriter(new FileWriter(m_sLogFile, true), true);
           } catch (IOException e1) {
              out = null;
              e1.printStackTrace();
           }
           // 2. 記錄服務啟動時間
           appendLog(out, " 服務啟動時間:" + df.format(new Date()));
           while (true) {
              // 1. 判斷當前系統時間是否被修改過
              boolean bShoudShutDownPC = validateShoudShutDownPC(out);
              if (bShoudShutDownPC) {
                  // 驗證沒通過,強制關機
                  exectueShutDown(out);
              } else {
                  bHasShutDownPC = false;
              }
              // 2. 當前線程休眠下
              try {
                  Thread.sleep(m_nDetectInterval);
              } catch (InterruptedException e) {
                  appendLog(out, e.getMessage());
              }
           }
       }
       /**
         * 驗證當前時間是否是需要關機的時間
         *
         * @return
         */
       private boolean validateShoudShutDownPC(PrintWriter _out) {
           // 1. 判斷是否修改了系統時間
           boolean bHasModifySystemTime = detectModifySytemTime(_out);
           appendLog(_out, "bHasModifySystemTime :" + bHasModifySystemTime);
           if (bHasModifySystemTime) {
              return bHasModifySystemTime;
           }
           // 2. 沒有修改系統時間,則判斷當前時間是否超過了指定的時間
           boolean bShoudSleep = nowIsSleepTime();
           appendLog(_out, "bShoudSleep :" + bShoudSleep);
           if (bShoudSleep) {
              return bShoudSleep;
           }
           return false;
       }
       /**
         * 判斷當前時間是否應該休息的時間
         *
         * @return
         */
       private boolean nowIsSleepTime() {
           // 1. 獲取當前小時和分鐘
           Calendar aCalendar = Calendar.getInstance();
           int nHour = aCalendar.get(Calendar.HOUR_OF_DAY);
           int nMinute = aCalendar.get(Calendar.MINUTE);
           // 2. 判斷當前小時是否在可以使用PC 的時間內, 最大小時為23
           if (nHour < m_nUsePCMinHour) {
              return true;
           }
           // 23 點需要單獨判斷,超過23 點30 就應該休息
           if ((nHour >= m_nUseComputerMaxHour) && (nMinute >= m_nMinutes)) {
              return true;
           }
           // 3. 非休息時間
           return false;
       }
       /**
         * 判斷是否有人修改了系統時間,如果有人修改了系統時間返回true ,<BR>
         * 否則返回false
         *
         * @return
         */
       private boolean detectModifySytemTime(PrintWriter _out) {
           // 1. 第一次檢測系統時間
           if (m_lLastMilliSeconds == 0) {
              m_lLastMilliSeconds = System.currentTimeMillis();
              return false;
           }
           // 2. 檢測兩次時間的差值
           long lInteral = System.currentTimeMillis() - m_lLastMilliSeconds;
           lInteral = Math.abs(lInteral);
           // 3. 判斷兩次的時間間隔, 兩次結果不一定完全等于 m_nDetectInterval ,允許誤差為1 分鐘
           long lMaxInterval = m_nDetectInterval + 60 * 1000;
           appendLog(_out, "lInteral :::" + lInteral);
           appendLog(_out, "lMaxInterval :::" + lMaxInterval);
           if (lInteral > lMaxInterval) {
              // 有人修改了系統時間,強制關機
              return true;
           }
           // 4. 只有沒人修改時間才記錄上次檢測時間
           m_lLastMilliSeconds = System.currentTimeMillis();
           return false;
       }
       /**
         * 在指定的流中寫入日志信息
         *
         * @param _outWriter
         * @param _sAppendContent
         */
       private void appendLog(PrintWriter _outWriter, String _sAppendContent) {
           if (_outWriter == null) {
              return;
           }
           _outWriter.println(_sAppendContent);
       }
       /**
         * 執行關機命令
         */
       private void exectueShutDown(PrintWriter _out) {
           if (bHasShutDownPC) {
              SimpleDateFormat df = new SimpleDateFormat(
                     "yyyy-MM-dd HH:mm:ss");
              appendLog(_out, " 系統即將關閉, 當前時間:" + df.format(new Date()));
              return;
           }
           appendLog(_out, " 有人修改了系統時間,系統強制關機!");
           // 關機
           try {
              Runtime.getRuntime().exec(
                     "shutdown -s -t 120 -c /" 很晚了,該睡覺了,2 分鐘后關閉計算機。/"");
           } catch (IOException e) {
              appendLog(_out, e.getMessage());
           }
           bHasShutDownPC = true;
       }
    }
}

希望本文所述對大家的Java程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美裸体xxxxx| 国产精品aaa| 国产日韩av在线| 久久久之久亚州精品露出| 久久视频在线直播| 久久久久久久av| 91精品国产91久久久久久不卡| 浅井舞香一区二区| 欧美丝袜一区二区三区| 欧美性高潮在线| 欧美色欧美亚洲高清在线视频| 精品久久久国产| 欧美激情欧美狂野欧美精品| 亚洲国产精品久久91精品| 国产美女久久久| 欧美日韩电影在线观看| 亚洲精品97久久| 有码中文亚洲精品| 久久伊人色综合| 91精品综合久久久久久五月天| 91视频九色网站| 亚洲精品456在线播放狼人| 国产精品高潮呻吟视频| 精品一区二区三区四区| 性视频1819p久久| 热久久视久久精品18亚洲精品| 午夜精品久久久久久久久久久久| 欧美孕妇毛茸茸xxxx| 国产精品中文字幕久久久| 精品一区二区三区四区| 国产欧美精品一区二区| 91在线免费网站| 欧美日韩国产中文字幕| 欧美一级淫片videoshd| 91在线视频导航| 欧美性开放视频| 国产精品第二页| 国产精品久久久久999| 亚洲免费影视第一页| 国产精品久久国产精品99gif| 欧美猛交免费看| 一区二区三区回区在观看免费视频| 国产精品视频一| 日本精品久久久久久久| 国产精品观看在线亚洲人成网| 精品高清美女精品国产区| 另类专区欧美制服同性| 欧美另类在线播放| 久久综合九色九九| 色哟哟亚洲精品一区二区| 国产精品精品视频| 日韩精品福利在线| 欧美黑人极品猛少妇色xxxxx| 欧美在线视频在线播放完整版免费观看| 久久久成人av| 亚洲aa在线观看| 青青草99啪国产免费| 欧美丰满片xxx777| 91免费视频网站| 91九色精品视频| 琪琪亚洲精品午夜在线| 亚洲精品综合久久中文字幕| 日韩精品免费视频| 国产精品久久久久久久一区探花| 国语自产精品视频在免费| 国产一区二区在线免费| 91国自产精品中文字幕亚洲| 欧美日韩国产精品一区二区三区四区| 国产一区二区三区免费视频| 91sa在线看| 伊人久久久久久久久久| 日本久久中文字幕| 日韩av电影在线免费播放| 国产精品海角社区在线观看| 国产亚洲一级高清| 亚洲综合日韩中文字幕v在线| 日韩在线精品视频| 在线播放精品一区二区三区| 日韩中文理论片| xx视频.9999.com| 亚洲激情久久久| 国产精品麻豆va在线播放| 国产精品一区二区三| 欧美夜福利tv在线| 亚洲精品大尺度| 欧美日韩国产综合新一区| 亚洲iv一区二区三区| 久久精品国产91精品亚洲| 欧美成人精品在线视频| 78色国产精品| 日韩亚洲精品视频| 色先锋久久影院av| www日韩中文字幕在线看| 91po在线观看91精品国产性色| 亚洲乱码av中文一区二区| 欧美在线激情网| 久久综合久久88| 欧美最猛性xxxxx免费| 91黑丝在线观看| 日韩在线免费视频| 亚洲另类xxxx| 国产精品久久网| 97精品国产97久久久久久免费| 国产免费成人av| 欧美性猛交丰臀xxxxx网站| 久久久久久亚洲精品不卡| 欧美大尺度电影在线观看| 欧美日韩国产色| 26uuu久久噜噜噜噜| 亚洲国产99精品国自产| 国产欧美一区二区三区在线| 日韩成人av一区| 97精品久久久中文字幕免费| 国产剧情日韩欧美| xxxxx成人.com| 精品在线欧美视频| 91亚洲精品在线| 日韩欧美一区二区三区久久| 日韩av免费一区| 欧美大片免费看| 69**夜色精品国产69乱| 亚洲国产天堂网精品网站| 亚洲色图国产精品| 亚洲一区久久久| 全球成人中文在线| 欧美亚洲激情视频| 欧美性xxxx极品高清hd直播| 亚洲欧美一区二区三区久久| 亚洲精品综合久久中文字幕| 久久久久久久久久久91| 亚洲aa在线观看| 久久精品国产亚洲7777| 成人福利在线视频| 久久久精品视频在线观看| 亚洲最新av网址| 久久好看免费视频| 日韩中文在线视频| 亚洲一区二区久久久久久| 北条麻妃久久精品| 伦伦影院午夜日韩欧美限制| 亚洲精品v欧美精品v日韩精品| 美女久久久久久久久久久| 91午夜理伦私人影院| 日本中文字幕成人| 亚洲欧美中文另类| 日韩欧美国产激情| 国语自产精品视频在线看抢先版图片| 国产日韩欧美另类| 欧美专区在线播放| 日韩欧美精品网站| 国产亚洲日本欧美韩国| 国产精品欧美亚洲777777| 国产精品入口免费视| 欧美成人性色生活仑片| 国产精品欧美久久久| 九九热这里只有精品6| 日韩美女激情视频| 精品国产一区二区三区久久狼5月| 青草热久免费精品视频| 成人免费激情视频| 91地址最新发布| 91精品在线播放| 亚洲福利视频久久| 亚洲国产97在线精品一区|