java註冊成windows服務程序及簡單java定時關機的程序代碼
本文實例講述了java如何註冊成windows服務程序及一個簡單的java定時關機程序代碼,分享給大家供大家參考。具體方法如下:
一、問題:
最近想找個軟件來控制電腦的關機時間,在網上找了幾個,都是可視化界面的可以設置具體的關機時間的軟件。由於我想編寫的關機程序是運行在別人機器上,只能讓該機器在晚上17 點到23 點25 分才上網,到了23 點25 分就可以自動關機。爲了讓別人感覺不到這個軟件的“存在”(免得使用者自己關閉定時關機軟件),所以我想把關機軟件註冊爲服務的方式,運行在後臺。這裏介紹下如何利用javaService 軟件把java 程序註冊爲windows 服務。
二、實現方法:
1. 利用javaService 註冊java 程序爲windows 服務
① 下載javaService
訪問網址 下載windows 版本的javaService 文件,我下載的是 ,目前最新的版本就是“2.0.10 ”。
② 安裝javaService
解壓我們下載下來的javaServices 到一個目錄,我是解壓到目錄“D:/software/JavaService-2.0.10 ”下(解壓到任何目錄都可以,最好別解壓到中文目錄,省的出現問題 )
③ 編寫定時關機代碼
1) 類的名字爲:
rShutDownWindows
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 “目錄,執行如下命令:
複製代碼 代碼如下: -install MyShutDownService "%JAVA_HOME%"/jre/bin/server/ ="%JAVA_HOME%"/lib/;D:/software/JavaService-2.0.10/classes -start rShutDownWindows
其中“-install “後面的參數爲服務的名稱,“-start ”參數後邊是要啓動的類名,“ ”後面參數中的
“D:/software/JavaService-2.0.10/classe ”地址是我的“TimerShutDownWindows ”類存放的路徑,實際應用中修改爲自己的classPath 即可。
這裏需要注意幾點:
1) “%JAVA_HOME% ”jdk 目錄,如果沒有配置jdk 目錄,則替換爲jdk 的實際絕對地址。
2) 是必須的,因爲服務啓動的時候無法訪問系統的CLASSPATH 變量,所以必須在這裏聲明;如果jar 比較多,爲避免寫的.命令過長,我們可以使用“=jars 所在目錄”參數。
3) 服務添加之後,可以在命令行中敲入“ ”命令來查看所有服務,並可以對服務的啓動類型(自動啓動還是手動啓動等)進行修改。
⑤ 測試
1) 啓動服務
當我們註冊完服務後,我們可以通過命令“net start MyShutDownService ”來啓動該服務,服務啓動後會在D 盤根目錄生成my_ 日誌文件。
2) 關閉服務
如果我們要關閉服務,可以通過命令“net stop MyShutDownService ”來關閉該服務。
3) 刪除服務
當我們想刪除該服務時,可以使用命令“sc MyShutDownService ”來刪除該服務。
2. 定時關機代碼
複製代碼 代碼如下:
package r;
import ;
import Writer;
import ception;
import tWriter;
import leDateFormat;
import ndar;
import ;
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:" + rator
+ "my_";
/* 記錄當前系統是否已經啓動自動關閉程序 */
private static boolean bHasShutDownPC = false;
/**
* @param args
*/
public static void main(String[] args) {
// 1. 單獨開啓一個線程去檢測
Thread aThread = new Thread(new TimerDetector());
t();
}
/**
* 定義內部類
*
* @author Administrator
*
*/
static class TimerDetector implements Runnable {
/*
* (non-Javadoc)
*
* @see able#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;
tStackTrace();
}
// 2. 記錄服務啓動時間
appendLog(out, " 服務啓動時間:" + at(new Date()));
while (true) {
// 1. 判斷當前系統時間是否被修改過
boolean bShoudShutDownPC = validateShoudShutDownPC(out);
if (bShoudShutDownPC) {
// 驗證沒通過,強制關機
exectueShutDown(out);
} else {
bHasShutDownPC = false;
}
// 2. 當前線程休眠下
try {
p(m_nDetectInterval);
} catch (InterruptedException e) {
appendLog(out, essage());
}
}
}
/**
* 驗證當前時間是否是需要關機的時間
*
* @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 = nstance();
int nHour = (_OF_DAY);
int nMinute = (TE);
// 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 = entTimeMillis();
return false;
}
// 2. 檢測兩次時間的差值
long lInteral = entTimeMillis() - m_lLastMilliSeconds;
lInteral = (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 = entTimeMillis();
return false;
}
/**
* 在指定的流中寫入日誌信息
*
* @param _outWriter
* @param _sAppendContent
*/
private void appendLog(PrintWriter _outWriter, String _sAppendContent) {
if (_outWriter == null) {
return;
}
_tln(_sAppendContent);
}
/**
* 執行關機命令
*/
private void exectueShutDown(PrintWriter _out) {
if (bHasShutDownPC) {
SimpleDateFormat df = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
appendLog(_out, " 系統即將關閉, 當前時間:" + at(new Date()));
return;
}
appendLog(_out, " 有人修改了系統時間,系統強制關機!");
// 關機
try {
untime()(
"shutdown -s -t 120 -c /" 很晚了,該睡覺了,2 分鐘後關閉計算機。/"");
} catch (IOException e) {
appendLog(_out, essage());
}
bHasShutDownPC = true;
}
}
}
希望本文所述對大家的Java程序設計有所幫助。
相關文章
-
如何用Java創建一個簡單的Swing應用程序
引導語:Swing是一組Java程序元件,它能夠創建圖象用戶接口(GUI)元件,如按鈕和滾動條,它們獨立於特定操作系統的開窗口系統。以下是本站小編分享給大家的如何用Java創建一個簡單的Swing應用程序,希望大家喜歡!先給出一段代碼 -
sun認證java程序員須知Java日誌框架
作爲一名Java程序員,明確的知道日誌系統是一個成熟Java應用所必不可少的,在開發和調試階段,日誌可以幫助我們更好更快地定位bug;在運行維護階段,日誌系統又可以幫我們記錄大部分的異常信息,從而幫助我們更好的完善系統。下 -
計算機二級JAVA考試構建JAVA程序2017
很多人一見到說要編程就以爲很難,其實只有一點一滴學知識點也不難,下面是小編整理的計算機二級JAVA考試構建JAVA程序介紹,歡迎閱讀! 第一個java applicationjava程序分爲java application(java 應用程序)和java applet -
如何在Dreamweaver中爲網頁插入Java程序
Java 是一種程序設計語言, Java applet ( Java 小程序)是在 Java 的基礎上演變而成的、能夠嵌入在網頁中的、可以執行一定小任務的應用程序。那麼,如何在Dreamweaver中爲網頁插入Java程序呢?下面本站小編帶大家一起來看 -
在Java中執行JavaScript代碼
我們要在Java中執行中的execute(s1,s2)方法,文件內容如下:function execute(s1, s2){ retu s1 + s2;}首先需要定義一個接口,這個接口中給出與要執行的JavaScript方法一樣的方法簽名,我們定義接口Methods,它的內容如下:/** * -
java與javascript之間json格式數據互轉詳解
javascript中對象與字符串的互轉對象轉爲字符串:通過de方法,這個是裏面的方法,引入到當前文件就可以了。字符串轉換爲對象:①使用de方法,同上,引入js就可以了。②jQuery中有個方法,$eJson也可以實現。java中json字符串與對象 -
JavaScript在Android的WebView中parseInt函數轉換不正確
今天被一個問題困擾,有一個頁面在瀏覽器(無論是手機還是PC)上運行良好,而通過WebView就出現了問題,有兩個值得計算始終出錯。於是就通過alert,把這個值顯示出來,發現和瀏覽器上計算的結果差了很多,本來是正數,卻變成了負數。仔 -
網頁程序設計之實用JavaScript代碼段
JavaScript正變得越來越流行,它已經成爲前端開發的第一選擇。下面是小編收集的10段實用JavaScript代碼,基於它們你還可以創造出更強大的JS插件或功能函數。 1. 判斷日期是否有效JavaScript中自帶的日期函數還是太過 -
windows下JAVA敏捷開發環境搭建步驟
編程開發環境搭建還是挺重要的,第一步是先要搭建環境,有了環境才能開展工作。本文我們來看看windows下JAVA敏捷開發環境搭建步驟。整個軟件項目分爲四個環境 開發本地環境、開發環境、測試環境、IDC環境。和傳統C++開發 -
SUN JAVA程序員和開發員(SCJD)認證
java程序員的認證Sun Certified JAVA Programmer(SCJP) 課程:SL-275 JAVA語言編程本課程使學員掌握如何使用標準JAVA Development Kit,V1.1 (JDK) 開發應用程序和applets。在本課程中您將學會JAVA 語言的語法。 如