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(); }
}
|