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 支付寶

支付寶