中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

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

      時間:2024-06-20 03:46:17 計算機等級 我要投稿
      • 相關推薦

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

        Java能夠自動處理對象的引用和間接引用,實現自動的無用單元收集,使用戶不必為存儲管理問題煩惱,能更多的時間和精力花在研發上。下面是小編收集的關于java實現電腦定時關機的方法,希望大家認真閱讀!

      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 ,

        * 否則返回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實現電腦定時關機的方法】相關文章:

      電腦在哪設置定時關機10-18

      win7系統定時關機設置方法07-30

      Java動態代理實現AOP的方法07-22

      java實現web服務器的方法10-14

      電腦關機后自動重啟解決方法09-13

      電腦鼠標關機后發光問題的解決方法05-11

      win8系統電腦關機的6種方法10-15

      實現鼠標畫圖的Java程序06-22

      Java多線程的實現方式07-08

      強制關機對電腦有什么危害09-25

      主站蜘蛛池模板: 中日无码精品一区二区三区| 裕民县| 久久亚洲aⅴ精品网站婷婷| 平安县| 久久91精品国产91久久麻豆| 蜜桃视频色版在线观看| 自慰高潮网站在线观看| 亚洲一区二区三区无吗| 巩义市| 封丘县| 石棉县| 永胜县| 平武县| 竹北市| 岳普湖县| 国产精品98福利小视频| 国产午夜精品久久久久| 国产口爆一区二区三区| 精品的一区二区三区| 亚洲人成网站久久久综合| 国产自产21区激情综合一区| 亚洲欧美久久婷婷爱综合一区天堂| 日韩少妇人妻一区二区| 亚洲中文字幕av天堂| 国产精品无码不卡在线播放| 晋城| 色乱码一区二区三区在线| 亚洲区福利视频免费看| 91精品国产91久久综合桃花| 久久青青草视频免费观看| 男人午夜a天堂一区二区三区| 读书| 岛国av网站在线播放| 亚洲一区二区高清在线| 亚洲一码二码在线观看| 国产av一区二区三区区别| 国产亚洲精选美女久久久久| 欧美丝袜秘书在线一区| 国产精品麻豆成人av| 久久久久久无中无码| 亚洲午夜看片无码|