Java实现Windows自动重启并累计重启次数,运行无响应如何解决
问题原因排查
- 逻辑错误:原代码只要
C:\reboots\numberOfReboots.txt存在就直接System.exit(0),第一次运行创建文件后,后续开机启动都会直接退出,不会执行重启逻辑;且计数未从历史文件读取,永远都是1,无法实现累加。 - 路径缺失未处理:如果
C:\reboots文件夹不存在,创建输出文件时会抛出IO异常,程序直接崩溃,无法走到执行重启命令的步骤。 - 命令执行适配问题:Windows下直接调用
shutdown命令需要通过cmd.exe承载,直接用Runtime.exec执行可能出现调用失败的情况。 - 启动配置问题:若直接将jar包放入启动文件夹,系统无法直接运行jar程序,需要配套bat启动脚本。
修复后代码
import java.io.*; public class AutoRestart { public static void main(String[] args) throws IOException { int numRestarts = 0; File rebootDir = new File("C:\\reboots"); // 先判断文件夹是否存在,不存在就创建 if (!rebootDir.exists()) { rebootDir.mkdirs(); } File countFile = new File(rebootDir, "numberOfReboots.txt"); // 读取历史重启次数 if (countFile.exists()) { try (BufferedReader br = new BufferedReader(new FileReader(countFile))) { String line = br.readLine(); if (line != null && line.contains(": ")) { numRestarts = Integer.parseInt(line.split(": ")[1].trim()); } } catch (Exception e) { // 读取异常就默认从0开始 numRestarts = 0; } } // 次数累加 numRestarts++; // 写入新的计数 try (PrintWriter writer = new PrintWriter(countFile)) { writer.println("Number of times rebooted: " + numRestarts); } // 适配Windows调用shutdown命令 Runtime.getRuntime().exec("cmd /c shutdown -r -t 0"); } }
启动配置步骤
- 将代码编译打包成可运行jar包,比如命名为
AutoRestart.jar,放在固定路径比如C:\reboots\AutoRestart.jar - 新建一个bat脚本,命名为
startAutoRestart.bat,内容如下:
@echo off java -jar C:\reboots\AutoRestart.jar
- 把这个bat脚本放入Windows启动文件夹(按下Win+R输入
shell:startup回车就能打开启动文件夹) - 测试前建议先手动运行一次bat脚本,确认可以正常重启、计数文件正常写入后再验证开机启动逻辑。
如果触发重启失败,可以右键bat脚本选择「以管理员身份运行」测试,确认是否是权限不足导致的问题,需要的话可以给bat脚本配置管理员运行权限。
内容的提问来源于stack exchange,提问作者SuddenLife
相关产品推荐
相关产品推荐

