JAVA自动更新程序

Java和Lua的完美结合:实现Java程序的动态扩展和脚本自动升级 Lua是一种轻量级的脚本语言,常用于游戏开发和嵌入式系统中。它与Java不同,Lua不支持多线程和原生GUI编程。因此,在一些场景下,我们需要将Java和Lua结合起来使用,以弥补两者的不足。本篇博文将介绍如何在Java程序中使用Lua代码,并且在Lua中调用Java代码。 阅读详情

最近由于一个工程需要做应用程序启动时,自动更新的项目
在GOOGLE上找了半天也没见到什么比较好的办法
自己动手写了一个通过版本号检查网络上是不是存在新的更新文件,并自动通过HTTP下载文件的程序
希望对正在找此类程序的朋友有帮助

本地文件需要一个ver.txt  此文件内容为本地软件版本号
网络上我直接在一个页面上打印出网络存在的版本号
 例如,这个例子里,我在 http://XXX.XXX.XXX/AutoUpdate/ver  这里直接打印出版本号

源文件:http://211.136.109.100/beiouwolf/AutoUpdate.rar 

 

import javax.swing.*;
import java.awt.*;
import java.net.*;
import java.io.*;

public class CheckUpdate extends JFrame {
    JFrame c = this;

    public CheckUpdate() {
        //设置窗体属性
        setAttb();

        JLabel title = new JLabel("正在检查网络上的更新资源...");
        this.add(title, BorderLayout.NORTH);
        JTextArea msg = new JTextArea();
        this.add(msg, BorderLayout.CENTER);
        JLabel process = new JLabel();
        this.add(process, BorderLayout.SOUTH);
       
        //启动更新线程
        new Check(msg, process).start();
    }

    private class Check extends Thread {
        //标识,是否存在新的更新文件
        private boolean isUpdated = false;
        //保存最新的版本
        String netVersion;
        //本地版本文件名
        String LocalVerFileName = "ver.txt";

        //显示信息
        private JTextArea msg;
        private JLabel process;

        public Check(JTextArea msg, JLabel process) {
            this.msg = msg;
            this.process = process;
        }

        public void run() {
            //更新文件版本标识URL
            String versionUrl = "http://XXX.XXX.XXX/AutoUpdate/ver";

            URL url = null;
            InputStream is = null;
            InputStreamReader isr = null;
            BufferedReader netVer = null;

            //读取网络上的版本号
            try {
                url = new URL(versionUrl);
                is = url.openStream();
                isr = new InputStreamReader(is);

                netVer = new BufferedReader(isr);
                String netVerStr = netVer.readLine();
                String localVerStr = getNowVer();

                if (netVerStr.equals(localVerStr)) {
                    msg.append("当前文件是最新版本/n");
                    isUpdated = false;
                } else {
                    msg.append("存在更新文件,现在开始更新.../n");
                    isUpdated = true;
                    netVersion = netVerStr;
                }

            } catch (MalformedURLException ex) {
            } catch (IOException ex) {
            } finally {
                //释放资源
                try {
                    netVer.close();
                    isr.close();
                    is.close();
                } catch (IOException ex1) {
                }
            }

            //如果版本不同,下载网络上的文件,更新本地文件
            if (isUpdated) {
                //本地需要被更新的文件
                File oldFile = new File("client.exe");
                //缓存网络上下载的文件
                File newFile = new File("temp.exe");
               
                //网络上的文件位置
                String updateUrl =
                        "http://XXX.XXX.XXX/downloads/simpkle.exe";

                HttpURLConnection httpUrl = null;
                BufferedInputStream bis = null;
                FileOutputStream fos = null;

                try {
                    //打开URL通道
                    url = new URL(updateUrl);
                    httpUrl = (HttpURLConnection) url.openConnection();

                    httpUrl.connect();

                    byte[] buffer = new byte[1024];

                    int size = 0;

                    is = httpUrl.getInputStream();
                    bis = new BufferedInputStream(is);
                    fos = new FileOutputStream(newFile);

                    msg.append("正在从网络上下载新的更新文件/n");

                    //保存文件
                    try {
                        int flag = 0;
                        int flag2 = 0;
                        while ((size = bis.read(buffer)) != -1) {
                            //读取并刷新临时保存文件
                            fos.write(buffer, 0, size);
                            fos.flush();

                            //模拟一个简单的进度条
                            if (flag2 == 99) {
                                flag2 = 0;
                                process.setText(process.getText() + ".");
                            }
                            flag2++;
                            flag++;
                            if (flag > 99 * 50) {
                                flag = 0;
                                process.setText("");
                            }
                        }
                    } catch (Exception ex4) {
                        System.out.println(ex4.getMessage());
                    }

                    msg.append("/n文件下载完成/n");

                    //把下载的临时文件替换原有文件
                    CopyFile(oldFile,newFile);
                   
                    //把本地版本文件更新为网络同步
                    UpdateLocalVerFile();

                } catch (MalformedURLException ex2) {
                } catch (IOException ex) {
                    msg.append("文件读取错误/n");
                } finally {
                    try {
                        fos.close();
                        bis.close();
                        is.close();
                        httpUrl.disconnect();
                    } catch (IOException ex3) {
                    }
                }
            }

            //启动应用程序
            try {
                msg.append("启动应用程序");
                Thread.sleep(500);
                Process p = Runtime.getRuntime().exec("client.exe");
            } catch (IOException ex5) {
            } catch (InterruptedException ex) {
            }
           
            //退出更新程序
            System.exit(0);
        }
//复制文件
        private void CopyFile(File oldFile, File newFile) {
            FileInputStream in = null;
            FileOutputStream out = null;
           
            try {
                if(oldFile.exists()){
                    oldFile.delete();
                }
                in = new FileInputStream(newFile);
                out = new FileOutputStream(oldFile);

                byte[] buffer = new byte[1024 * 5];
                int size;
                while ((size = in.read(buffer)) != -1) {
                    out.write(buffer, 0, size);
                    out.flush();
                }
            } catch (FileNotFoundException ex) {
            } catch (IOException ex) {
            } finally {
                try {
                    out.close();
                    in.close();
                } catch (IOException ex1) {
                }
            }

        }

        private void UpdateLocalVerFile() {
            //把本地版本文件更新为网络同步
            FileWriter verOS = null;
            BufferedWriter bw = null;
            try {
                verOS = new FileWriter(LocalVerFileName);

                bw = new BufferedWriter(verOS);
                bw.write(netVersion);
                bw.flush();

            } catch (IOException ex) {
            } finally {
                try {
                    bw.close();
                    verOS.close();
                } catch (IOException ex1) {
                }
            }
        }

        private String getNowVer() {
            //本地版本文件
            File verFile = new File(LocalVerFileName);

            FileReader is = null;
            BufferedReader br = null;

            //读取本地版本
            try {
                is = new FileReader(verFile);

                br = new BufferedReader(is);
                String ver = br.readLine();

                return ver;
            } catch (FileNotFoundException ex) {
                msg.append("本地版本文件未找到/n");
            } catch (IOException ex) {
                msg.append("本地版本文件读取错误/n");
            } finally {
                //释放资源
                try {
                    br.close();
                    is.close();
                } catch (IOException ex1) {
                }
            }
            return "";
        }
    }


    private void setAttb() {
        //窗体设置
        this.setTitle("Auto Update");
        this.setSize(200, 150);
        this.setLayout(new BorderLayout());
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        // 窗体居中
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = this.getSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        this.setLocation((screenSize.width - frameSize.width) / 2,
                         (screenSize.height - frameSize.height) / 2);
    }

    public static void main(String[] args) {
        CheckUpdate checkupdate = new CheckUpdate();
        checkupdate.setVisible(true);
    }
}



java 自动升级sql脚本 flyway 工具 为什么要用Flyway 在日常开发中,我们经常会遇到下面的问题: 自己写的SQL忘了在所有环境执行; 别人写的SQL我们不能确定是否都在所有环境执行过了; 有人修改了已经执行过的SQL,期望再次执行; 需要新增环境做数据迁移; 每次发版需要手动控制先发DB版本,再发布应用版本; 其它场景... 由于项目需求的变化,或者前期设计缺陷,导致在后期需要修改数据库,这应该是一个比较常见的事情,如果项目还没上线,你可能把表删除了重新创建,但是如果项目已经上 阅读详情

相关推荐

Java自动升级:控制Java版本的更新

然而,随着时间的推移,Java平台的不断演进,会有新的版本发布,这可能导致某些应用程序出现兼容性问题。为了确保应用程序的稳定性和安全性,我们需要对Java的升级过程进行有效的控制。本文将介绍如何实现Java自动升级的机制,并提供相应的源代码示例。通过以上步骤,我们可以实现Java自动升级的机制。这将确保我们的应用程序始终使用最新的Java版本,从而提高安全性和稳定性。需要注意的是,自动升级过程需要谨慎处理,以避免意外情况和不良影响。通过控制Java版本的更新,我们可以确保应用程序的兼容性和安全性。

CdiBug的博客 875

java软件自动升级

//很早以前的工程项目,比较乱,凑合看吧,希望对你有一点点帮助     //updateDaemonThread       //看了源码发现我记错了,这个线程不是轮循,是加在main.bat里的第2句,第一句就是主app     //主app关闭了,才会执行第2句,比轮循更好一点     import   java.io.*;     import   java.util.Prope

guyu520的专栏 9405

java 自动程序更新

设定 检查目录 程序运行目录 备份目录。 当到检查目录检测到文件后,进行解压缩,同时备份程序运行目录的内容到备份目录,并打上时间戳。 然后把解压缩的内容覆盖到程序运行目录

探索 Java 项目如何实现自动升级

📖本文将以 Jpom 为实际案例分享在 Java 项目中如何实现自动升级的功能。本文满满的干货,希望对大家有所启发或者帮助 🤔。

bwcx_jzy 的博客 820

Java自动升级软件源码.zip

利用socket和监听端口技术,每次发布新的软件版本时只需要将打包好的文件部署到自动升级服务器上,用户运行软件客户端时就会连接到自动升级服务器,检查是否有版本更新,如果有则完成更新后再运行最新版本,否则就运行当前工具版本。

利用FTP服务器来实现Java部署程序的自动更新

利用FTP服务器来实现Java部署程序的自动更新 有博客说明http://blog.youkuaiyun.com/jdk2006/article/details/6705467

java开发自动更新程序_JAVA自动更新程序

最近由于一个工程需要做应用程序启动时,自动更新的项目在GOOGLE上找了半天也没见到什么比较好的办法自己动手写了一个通过版本号检查网络上是不是存在新的更新文件,并自动通过HTTP下载文件的程序希望对正在找此类程序的朋友有帮助本地文件需要一个ver.txt 此文件内容为本地软件版本号网络上我直接在一个页面上打印出网络存在的版本号例如,这个例子里,我在 http://XXX.XXX.XXX/Auto...

weixin_29548281的博客 1818

maxwell 平面变压器仿真(一)

在学习开关电源设计的时候,我们难免要设计变压器,采用有限元仿真软件MAXWELL 可以帮助我们确定变压器的励磁电感,漏感等参数。对于我们的理论分析大有裨益。但是苦于这破软件的教程真的是相当的零散,我相信大家用起来也总是苦于没有系统的教程指导,撰写本文的目的有两个,一个是记录自己使用的一些问题,一个是给大家提供一个可以参考的文档。

qq_45405656的博客 8245

java 自动更新_JAVA自动更新程序

最近由于一个工程需要做应用程序启动时,自动更新的项目在GOOGLE上找了半天也没见到什么比较好的办法自己动手写了一个通过版本号检查网络上是不是存在新的更新文件,并自动通过HTTP下载文件的程序希望对正在找此类程序的朋友有帮助本地文件需要一个ver.txt 此文件内容为本地软件版本号网络上我直接在一个页面上打印出网络存在的版本号例如,这个例子里,我在 http://XXX.XXX.XXX/Auto...

weixin_31043675的博客 1578

Dell R730安装Windows Server 2008 R2

一、RAID驱动准备  在安装Windows server2008 R2操作系统时,如果没有发现硬盘,请将下面的阵列卡驱动先解压(在下载的.exe文件,双击点下一步会自动解压),解压后把那文件夹复制到U盘中。阵列卡 PERC9 H330 - H730 - H730P - H830 Controllers for Windows Server 2008 R2二、系统安装方法方法一:光盘安装  ①请您...

MarshLin 2万+

AutoDL跑yolo

由于博主在AutoDL的JupyterLab的终端直接上传ZIp文件要么老是再上传中被中断,要么就是上传后使用unzip指令解压显示“找不到”,作为纯小白的我实在太难了!这个文件列出了一个 Python 项目所需的所有依赖包及其精确的版本号。这个文件是 Python 项目中常见的一种方式,用于确保项目在不同环境中都能以相同的依赖包配置运行。3.进入JupyterLab,在文件夹目录中找到上传的文件夹,右键点击“复制路径”。然后在终端中输入以下指令进行切换到该文件夹路径。9.安装成功后开始输入指令开跑!

m0_73804659的博客 1206

java程序远程自动更新_您如何远程更新Java应用程序?

小编典典您没有指定服务器应用程序的类型-我将假设您没有在运行Web应用程序(因为部署WAR已经完成了您所谈论的内容,并且您很少需要Web应用程序来执行拉类型如果您正在谈论一个Web应用程序,那么下面的讨论仍然可以适用-您只需为WAR文件而不是单个文件实施更新检查和乒乓球)。您可能想看看jnlp-WebStart基于此(这是一种客户端应用程序部署技术),但是我很确定它可以针对服务器类型应用程序执行更...

weixin_33389310的博客 1429

Cadence Allegro通过手工绘制板框的方法

Cadence Allegro通过手工绘制板框的方法 Cadence Allegro绘制板框有三个方法: 1、通过手工绘制板框; 2、通过向导绘制板框; 3、通过导入DXF文件导绘制板框; 本章将教会大家如何通过手工的方法绘制100mm的矩形板框。 方法步骤如下: 一、通过放置绘图工具2D线绘制; 1、运行Cadence Allegro软件,打开File菜单栏,选择New。 2、这时软件会弹出Ne...

LGCPCB的博客 2万+

给多台机器的Java应用程序写一个自动更新的程序

问题:现有70几台前置机要逐步安装Java应用程序,现已经在10台机器上已经安装了Java应用程序。如果代码有变动的话,只能通过远程桌面连接到前置机的电脑进行手工操作。这样一天时间都荒废在这种无聊的时间上了。 想法:利用已经搭建的FTP服务器来实现前置机程序自动更新,从而解放自己...

chilie9862的博客 275

全球第一开源云ERP Odoo操作手册 模块安装和界面汉化指南

Odoo 的功能包含在不同的模块中, 刚创建的数据库除 Odoo 的核心模块外, 其它模块并没有被安装到系统中,你可以根据需要安装它们。本节将介绍安装模块和界面汉化的相关知识。

weixin_44793763的博客 2073

光谱数据预处理综合

除了化学信息,光谱还包含其他不相关或不需要的信息,如电噪声,基质背景,杂散光,散射效应等。在用化学计量学方法建立校准模型时,利用预处理方法消除光谱数据中的无关信息和噪声是非常必要的。

qq_44204759的博客 5190

java中automatic,Java(桌面)應用程序的“自動更新”?

What system do you recommend for implementing "automatic updates" for some java (desktop) application? I'd also want to have module/plugin installation and update. Think Eclipse and Firefox.您推薦什么系統來實現...

weixin_29306875的博客 230

ICC2: pin shape不在track上引起的drc如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 433

java程序远程自动更新,如何使Java应用程序自动更新?

Problem: I have a standalone Java app (henceforth known as "the agent") that runs as a service on internal company servers. It acts as a remote agent for some central servers. As the agent gets deploy...

weixin_33245968的博客 520

13、超声断层乳腺图像融合算法:乳腺癌诊断新突破

本文介绍了一种新型超声断层乳腺图像融合算法,通过结合超声透射(UTTc、UTTα)和反射断层图像(URT),实现对乳腺组织的多参数自动可视化。该算法能有效区分良性与恶性肿瘤,具有高准确性、无辐射、低成本等优势,适用于大规模乳腺癌早期筛查。初步临床测试验证了其可行性,未来有望成为乳腺癌诊断的新标准。

9q8w7e6r5的博客 154

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: Android手机中获取手机号码和运营…
下一篇: 命令运行的判断依据: ; , &…
kf
kf
博客等级 码龄25年 12粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值