這個任務名稱寫的有點兒長,簡單來說就是類似于linux系統下的守護程序。在windows系統中,被稱為服務程序,可以在服務清單中檢視、開啟、關閉。
JAVA中其實程序的概念并不強烈,更多的接觸到的是線程。而實作這個守護程序,其實用到的也是線程。還有一個工具JavaService。
步驟如下:
1、建立兩個類:一個負責控制線程的啟停,一個就是運作的線程(代碼簡單,直接用txt寫,javac一下就行)
import java.util.*;
public class MyService
{
private static Thread thread = null;
private static Service service = null;
/**
* 退出服務方法(該方法必須有參數 String [] args)
*
* @param args
*/
public static void stopService(String[] args)
{
System.out.println("停止服務");
service.setRunFlag(false);
}
/**
* 啟動服務方法(該方法必須有參數 String [] args)
*
* @param args
*/
public static void startService(String[] args)
{
System.out.println("啟動服務");
// 産生服務線程
service = new Service();
thread = new Thread();
try
{
// 将服務線程設定為使用者線程,以避免StartService方法結束後線程退出
thread.setDaemon(false);
if (thread.isDaemon())
{
System.out.println("成功設定線程為使用者線程!");
}
thread.start();
service.run();//這句一定要有啊。我查資料的時候就因為沒這句,怎麼都不能執行o(╯□╰)o是以要避免“盲目崇拜”
}
catch (Exception e)
{
System.out.println("設定失敗!");
}
}
}
class Service implements Runnable
{
private boolean runFlag = true;
/**
* 設定服務線程運作标志值
*/
public synchronized void setRunFlag(boolean runFlag)
{
this.runFlag = runFlag;
}
/**
* 取得服務線程運作标志值
*/
private synchronized boolean getRunFlag()
{
return runFlag;
}
@Override
public void run()
{
System.out.println("服務線程開始運作。。。");
while (getRunFlag())
{
/*
* 擷取系統時間
*/
Calendar cal = Calendar.getInstance();
long mis = cal.getTimeInMillis();
System.out.println("目前時間:" + mis);
try
{
Thread.sleep(1000*300);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println("服務線程結束運作。。。");
}
}
2、把JavaService的解壓路徑加入到path
這步也可以直接把JavaService複制到MyService.class那個目錄裡
3、然後就打開cmd指令,跳轉至目前目錄,執行如下語句
JavaService.exe -install TJS "%JAVA_HOME%/jre/bin/server/jvm.dll" -Xmx128m -Djava.class.path=%CLASSPATH%;D:\javaTest -start MyService -method startService -stop MyService -method stopService -out "%CD%/out.log" -err "%CD%/err.log" -current "%CD%"
标紅那裡相當重要!因為必須在-Djava.class.path後加上你的類所在目錄才行。不然就會在啟動時出現啟動失敗,找不到類這樣的錯誤。網上有資料說在最後加個-auto,我是執行失敗,而且沒有auto也能開機自啟。求解釋~
TJS是TestJavaService,也就是這個服務程序顯示的程序名稱
現在建立好了,啟動方式有兩種:
a、在指令行輸入net start TJS
b、重新開機電腦(建議試試,這樣可以比較直覺的看到确實是開機自動運作的)
然後在out.log裡就可以看到輸出的結果了
在服務清單中也可以看到
不想要了也可以銷毀:JavaService -uninstall TJS
是以要保證你的程序名稱是唯一滴
關于每個指令的詳細含義,運作機制神馬的我就不過多的贅述了,網上都有。
筆記還是要有個筆記的樣子才好