利用ProcessBuilder在运行时更新程序

这篇博客介绍了一个利用ProcessBuilder在Java中实现在运行时更新程序的方法。通过设置命令行参数,创建新的进程来启动带有更新的jar包,确保程序能够无缝重启并进入后台运行。在代码示例中,作者展示了如何根据操作系统选择正确的java执行文件,并设置了工作目录和环境变量,以确保新jar包被正确执行。
摘要由CSDN通过智能技术生成

代码如下:

public void restart(File file) {
  try {
   System.out.println("程序准备在5秒后重启,转入后台运行!");
   Thread.sleep(5000);
   // 用一条指定的命令去构造一个进程生成器
   System.out.println("java home -- "
     + System.getProperty("java.home"));
   String java = "java.exe";
   if (!OsUtil.isOsWindows()) {
    java = "java";
   }
   ProcessBuilder pb = new ProcessBuilder(
     System.getProperty("java.home") + File.separator + "bin"
       + File.separator + java, "-DJAR_NAME=\""
       + file.getName() + "\"", "-jar", file.getName());
   // 将这个进程的工作区空间改为X,相当于指定jvm的user.dir
   // 这样的话,它就会去X目录下指定的jar文件
   pb.directory(new File(new File(PROG_DIR).getAbsolutePath()));
   // 得到进程生成器的环境 变量,这个变量我们可以改,
   Process p = pb.start();
   System.out.println("完成重启,已转入后台运行,本控制台将本结束!");
   System.exit(0);
  } catch (Exception e) {
   e.printStackTrace();// 重启过程只能忽略异常。靠JRE的健壮性保证。
  }
 }

 

其中方法中的参数"file"为新的jar包名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值