java C/S架构的客户端自动更新实现

前言:

用java开发的客户端,还在不断开发完善中,客户有几十个时,如果挨个通知下载更新,就太麻烦了,于是实现了一个更新功能,以节省更新的人力物力。

实现思路:

  1. 从服务器获取最新版本号,和当前版本判断,从而判断出是否需要更新
  2. 从服务器下载最新版本的jar文件到临时文件夹(所有java代码,包含更新的这一段,都导出为可执行的jar)
  3. 关闭当前程序,复制临时文件夹的新版本覆盖运行目录文件,启动程序(笔者最开始担心这个,敲黑板!,下面这句是重点)

第3点在实现时有疑虑,经过试验得知可行:因为Runtime.getRuntime().exec("windows运行命令");不阻塞,既执行到此句后可继续往后运行,以便关闭当前程序,完成覆盖重启

实现过程:

1. 在服务器端保存版本号:

在http服务器上用json文件存放最新版本信息: version.json

{
	"version":2.0,
	"desc":"1.引入自动跟新功能。\r\n2. 提高通讯效率。\r\n3. 修复若干bug。",
	"date":"2018-8-8 22:00:00"
}

2. 在服务器上存放最新版本程序:

因为程序包含 exe外壳,程序核心jar文件和jre运行环境,每次更新全部下载一遍很浪费服务器资源,我们仅仅在http服务器存放jar文件,并且打包exe时不把jar文件包含进去,仅仅用于调用 jre/bin/java.exe执行jar文件。
要实现上述运行方式,推荐一个软件,可以方便的把bat脚本打包成exe,来启动jar,可以实现不弹出cmd窗口,管理员权限运行,软件图标,运行目录等 https://download.csdn.net/download/sinat_34820292/10591678

3. 客户端实现下载和重启:

package com.your;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import com.alibaba.fastjson.JSONObject; // 版本用json存的,项目需要引入fastjson
import com.your.server.Main; //你的主程序,下面要用来关闭程序实现重启,请读者
//自己实现关闭程序方法,使用思路为主程序开启时调用本类相关方法,完成更新,截图中的
//弹窗根据自己的业务去实现,如监测到新版本,则弹窗提示,点击确定后下载新版本,下载完了提示重启软件

public class Upgrader {
   
	public static float currentversion = 2.0f;//当前版本号
	public static float newversion = currentversion; //最新版本号
	public static boolean downloaded = false;//下载完成与否
	public static boolean errored = false;//下载出错与否
	public static String versinurl = "http://your.server/version/version.json"; //版本存放地址
	public static String jarurl = "http://your.server/download/celent/Main.jar"; 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值