0%

java程序自动重启

java写的cs程序,要求设置一个时间,让程序自动重启。

思路,java代码写一个定时器,每隔一秒判断是否重启,若符合条件,则创建一个新的线程,线程调用一个重启的批处理,重启批处理先停止5分钟,接着在启动java程序。

项目目录结构如下:

启动批处理run.bat:

1
java -jar barcode.jar

重启批处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();
}

}
layicr 微信

微信

layicr 支付宝

支付宝