java写的cs程序,要求设置一个时间,让程序自动重启。
思路,java代码写一个定时器,每隔一秒判断是否重启,若符合条件,则创建一个新的线程,线程调用一个重启的批处理,重启批处理先停止5分钟,接着在启动java程序。
目录结构如下:
启动批处理:
run.bat
内容:
java -jar barcode.jar
重启批处理,300秒,相当于6分钟:
restart.bat
内容:
ping -n 300 127.0.0.1>nul
java -jar barcode.jar
exit
配置文件config.xml,配置一个节点:
16:00:00
java代码,以下定时器为简单写法,优化事情请自行解决:
/**
* 重启软件
* @param date
*/
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类:
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 java.util.UUID;
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();
}
}