java寫的cs程序,要求設置一個時間,讓程序自動重啟。
思路,java代碼寫一個定時器,每隔一秒判斷是否重啟,若符合條件,則創建一個新的線程,線程調用一個重啟的批處理,重啟批處理先停止5分鐘,接著在啟動java程序。
項目目錄結構如下:
啟動批處理run.bat:
重啟批處restart.bat,300秒,相當于6分鐘:
1 2 3
| ping -n 300 127.0.0.1>nul java -jar barcode.jar exit
|
配置文件config.xml,配置一個節點:
1 2
| <!--重啟時間,24小時格式:hh:mm:ss--> <restartTime>16:00:00</restartTime>
|
java代碼,優化自行解決:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| /** * 重啟軟件 */ private void restartApp() { //創建一個定時器 new Thread(new Runnable(){ public void run() { String nowDate = null; String date = getConfigInfo().getRestartTime(); while(true) { try { Thread.sleep(1000);
//當前時間格式HH:mm:ss nowDate = DateTimeHelper.format(new Date(), "HH:mm:ss"); if(nowDate.equals(date))//對比成功 { new Thread( new Runnable(){ public void run() {
//調用重啟批處理 String str = UtilityHelper.runConsoleCommand("cmd.exe /c start restart.bat"); System.out.println(str); } } ).start(); //休眠3秒 Thread.sleep(3*1000);
//跳出where break; } } catch (Exception ex) { logger.error(ex.getMessage()); } }
//結束其它線程 //...... //結束程序 System.exit(0); } }).start(); }
|
UtilityHelper:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.UnsupportedEncodingException; import java.net.InetAddress; import java.net.URLDecoder; import java.net.UnknownHostException;
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
public class UtilityHelper { private static Logger logger = LoggerFactory.getLogger(UtilityHelper.class); /** * 執行本地命令 * * @param command * 命令 * @return */ public static String runConsoleCommand(String command) { StringBuffer buffer = new StringBuffer(); InputStream inputStream = null; Process p = null; try { p = Runtime.getRuntime().exec(command); inputStream = new BufferedInputStream(p.getInputStream()); while (true) { int c = inputStream.read(); if (c == -1) { break; } buffer.append((char) c); } } catch (IOException ex) { // ex.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { // e.printStackTrace(); } } if (p != null) { p.destroy(); p = null; } } return buffer.toString(); }
}
|