`
dajiangxiaoyan
  • 浏览: 20918 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

java jar自动更新

    博客分类:
  • java
阅读更多

最近用swing写了一个客户端工具(以jar的方式),下面是写的jar自动更新程序。

 

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.swing.JOptionPane;

public class AutoUpdateThread extends Thread {

    private String filename = "test.jar";
    private static String xiheportalURL = "http://localhost:8080/test/testJarAction";

    public static void main(String[] arg) {
        try {
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        UpdateJFrame uj = null;
        String message = null;
        String title = null;

        try {
            uj = new UpdateJFrame();//提示用户正在更新,更新完成自动关闭
            uj.setLocationRelativeTo(null);//居中显示
            uj.setResizable(false); 
            uj.setVisible(true);

            byte[] buffer = getXiheJarFormServer();//自动下载最新的jar包
            if (buffer == null) {
                message = "更新失败!原因:从XXXX上下载jar包失败!";
                title = "Error";
            } else {
                autoUpdate(buffer);//替换本地jar包
                message = "更新成功! 重新启动?";
                title = "Message";
            }
        } catch (Exception e) {
            message = "更新失败!原因:" + e.getMessage();
            title = "Error";
            e.printStackTrace();
        } finally {
            if (uj != null) {
                uj.dispose();
            }
            int i = JOptionPane.showConfirmDialog(null, message, title,
                    JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null);
            if (i == 0) {
                reStartXihetool();
            }
        }

    }

    public void reStartXihetool() {//重新运行新版jar包
        try {
            File dir = new File("");
            String basepath = dir.getAbsolutePath();
            Runtime rt = Runtime.getRuntime();
            Process p = rt.exec("java -cp \"" + basepath + "/" + filename + "\" com.test skipUpdate");// com.test为jar主类
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public byte[] getXiheJarFormServer() throws Exception {
        URL target = new URL(xiheportalURL);
        HttpURLConnection conn = (HttpURLConnection) target.openConnection();
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Content-Type", "text/xml");
        conn.setRequestProperty("Accept", "text/xml");
        conn.setConnectTimeout(30000);
        conn.setReadTimeout(30000);
        conn.connect();
        // check response code 
        int code = conn.getResponseCode();
        boolean success = (code >= 200) && (code < 300);
        byte[] buffer = null;
        if (success) {
            InputStream in = conn.getInputStream();
            int size = conn.getContentLength();
            System.out.println("size:" + size);
            buffer = new byte[size];
            int curr = 0, read = 0;
            while (curr < size) {
                read = in.read(buffer, curr, size - curr);
                if (read <= 0) {
                    break;
                }
                curr += read;
            }
            //  System.out.println(new String(buffer));
            in.close();
        }
        return buffer;
    }

    public void autoUpdate(byte[] buffer) throws Exception {
        File dir = new File("");
        String basepath = dir.getAbsolutePath();
        String newfilepath = basepath + "/" + filename;
        System.out.println("newfilepath:" + newfilepath);
        File newfile = new File(newfilepath);
        OutputStream ops = new BufferedOutputStream(new FileOutputStream(newfile));
        ops.write(buffer);
        ops.close();
    }
}
1
0
分享到:
评论
1 楼 dreamever 2012-07-11  
赞一个,很不错的东西,学习了。

相关推荐

    java 自动程序更新

    在自动更新中,新的`jar`文件会被部署到程序运行目录,替换旧的版本。 总的来说,Java自动程序更新是一个涉及文件下载、解压缩、备份和覆盖的复杂过程。它需要精心设计,确保在不影响用户正常使用的情况下,无缝地...

    Java 自动加载JAR文件并运行其中的类方法

    在Java编程中,有时我们需要动态地加载...总之,Java自动加载JAR文件并运行其中的类方法是一项实用的技术,它增强了Java程序的灵活性和可扩展性。通过理解和掌握这些技术,开发者能够构建出更加强大和灵活的应用系统。

    java的jar包

    可以通过IDE(如Eclipse、IntelliJ IDEA)的构建工具(如Maven、Gradle)来管理这些依赖,自动下载和引入必要的JAR包,确保项目可以顺利编译和运行。 总的来说,Java的JAR包在软件开发中扮演着关键角色,它们封装了...

    sh脚本启动java -jar

    在Linux环境中,`sh`脚本是常用的自动化工具,用于执行一系列命令,特别是在启动Java应用程序时,如`java -jar`。这个标题和描述表明我们要讨论的是如何通过编写一个简单的Shell脚本来启动Java的JAR文件。这通常适用...

    java常用jar包集合

    - **struts2-plugins**:Struts2的插件包,如struts2-convention-plugin.jar、struts2-dojo-plugin.jar等,提供了各种功能扩展,如自动配置、Dojo工具支持等。 4. **Hibernate持久化框架**: - **hibernate-...

    Appium java jar包

    在Java环境下,我们可以利用Appium提供的jar包来编写测试脚本,实现对移动应用的自动化测试。 在“Appium java 测试框架 jar包”中,核心的jar文件是`appium-lib`,它是Appium Java客户端的核心库,包含了所有与...

    java linux启动jar包脚本

    脚本上有备注,将java项目打为jar包后,替换jar的包名为项目包名即可,log文件会自动生成,方便好用。

    自动打包.java文件成.jar的小程序(C++)

    Java编程语言以其跨平台性和丰富的库支持而广受欢迎,但为了在不同的系统上运行Java程序,我们需要将编译后的.class文件打包成一个可执行的JAR(Java Archive)文件。本篇文章将详细介绍如何使用C++编写一个小程序来...

    selenium-java.jar

    `selenium-java.jar` 是一个与 Selenium 相关的 Java 库文件,它包含了用于在 Windows 和 Mac 操作系统上执行自动化测试的组件。Selenium 是一款广泛使用的开源工具,主要用于 web 浏览器自动化,帮助开发者和测试...

    java jar包 全集

    Java开发中的JAR(Java Archive)包是Java平台特有的文件格式,用于集合多个类文件、相关的元数据和其他资源,便于程序的部署和运行。在Java应用程序中,JAR包允许开发者将众多类文件打包在一起,方便管理和执行。...

    编译运行java带jar包

    在Java编程环境中,有时我们需要将多个类打包成一个可执行的JAR(Java Archive)文件,以便于分发和执行。这个过程涉及到编译Java源代码、创建类路径(classpath)、构建MANIFEST.MF文件以及最终打包成JAR。下面我们...

    tomcat 部署java项目 jar

    标题中的“tomcat部署java项目jar”指的是在Apache Tomcat服务器上部署Java Web应用程序,通常以JAR(Java Archive)格式打包。Tomcat是一个开源的轻量级应用服务器,主要用于运行Servlet和JSP(JavaServer Pages)...

    Java_Jar包

    6. **打包与运行**:使用`jar`命令行工具或者构建工具如Maven、Gradle,开发者可以创建、更新和提取JAR文件。运行JAR文件,可以用`java -jar`命令。 7. **类路径(Classpath)**:在Java环境中,JAR文件需要被添加...

    自动部署相关jar包

    使用SSH2进行自动部署,你可以编写Java代码来连接到目标服务器,执行预定义的部署脚本,如解压应用、启动服务、更新配置等。这样,整个部署过程无需人工介入,大大提高了效率。 WebSocket,另一方面,是HTML5引入的...

    java jar包反编译

    通常,你只需选择目标jar文件,工具就会自动进行反编译并显示源代码。 总的来说,Java jar包反编译是一个技术性强且实用的技能,通过合适的工具可以有效地帮助我们理解和学习jar包中的代码逻辑。在实际操作中,除了...

    Bash脚本自动化管理Java JAR文件.zip

    本Bash脚本用于自动化管理Java JAR应用的启动、停止及监控。首先检查JAR进程是否在运行,如在运行则安全终止。随后,使用预设的Java参数启动JAR文件,并将输出和错误日志重定向至日志文件。启动后,脚本持续监控JAR...

    一些常用的java jar包

    总结来说,Java JAR包在Android SSH环境下扮演了重要角色,提供了实现远程控制、自动化任务和安全通信的能力。开发者应熟悉如何正确使用和管理JAR包,以优化项目结构,提升应用性能,并确保安全性。

    selenium-java 3.7.1.jar

    【Selenium-Java 3.7.1.jar】是一个关键组件,主要用于自动化Web应用程序的测试。这个特定的版本,3.7.1,是Selenium WebDriver的一个Java绑定,它允许开发者使用Java语言来编写测试脚本,从而实现对浏览器的自动化...

    java jar工具包查看工具

    - 工具会自动解析JAR内的类文件,展示对应的源代码。 - 你可以通过源代码视图导航类和方法,甚至搜索特定代码。 5. **其他JAR查看工具** 除了`jd-gui`,还有许多其他的JAR查看工具,例如: - **JAR Explorer**...

    泛微E-cology 二次开发Java Jar包

    本文将深入探讨“泛微E-cology 二次开发Java Jar包”所涉及的核心知识点。 一、泛微E-cology系统概述 泛微E-cology系统基于B/S架构,采用J2EE技术开发,支持多层分布式部署,具有高度的可扩展性和稳定性。系统涵盖...

Global site tag (gtag.js) - Google Analytics