最近用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();
}
}
分享到:
相关推荐
在自动更新中,新的`jar`文件会被部署到程序运行目录,替换旧的版本。 总的来说,Java自动程序更新是一个涉及文件下载、解压缩、备份和覆盖的复杂过程。它需要精心设计,确保在不影响用户正常使用的情况下,无缝地...
在Java编程中,有时我们需要动态地加载...总之,Java自动加载JAR文件并运行其中的类方法是一项实用的技术,它增强了Java程序的灵活性和可扩展性。通过理解和掌握这些技术,开发者能够构建出更加强大和灵活的应用系统。
可以通过IDE(如Eclipse、IntelliJ IDEA)的构建工具(如Maven、Gradle)来管理这些依赖,自动下载和引入必要的JAR包,确保项目可以顺利编译和运行。 总的来说,Java的JAR包在软件开发中扮演着关键角色,它们封装了...
在Linux环境中,`sh`脚本是常用的自动化工具,用于执行一系列命令,特别是在启动Java应用程序时,如`java -jar`。这个标题和描述表明我们要讨论的是如何通过编写一个简单的Shell脚本来启动Java的JAR文件。这通常适用...
- **struts2-plugins**:Struts2的插件包,如struts2-convention-plugin.jar、struts2-dojo-plugin.jar等,提供了各种功能扩展,如自动配置、Dojo工具支持等。 4. **Hibernate持久化框架**: - **hibernate-...
在Java环境下,我们可以利用Appium提供的jar包来编写测试脚本,实现对移动应用的自动化测试。 在“Appium java 测试框架 jar包”中,核心的jar文件是`appium-lib`,它是Appium Java客户端的核心库,包含了所有与...
脚本上有备注,将java项目打为jar包后,替换jar的包名为项目包名即可,log文件会自动生成,方便好用。
Java编程语言以其跨平台性和丰富的库支持而广受欢迎,但为了在不同的系统上运行Java程序,我们需要将编译后的.class文件打包成一个可执行的JAR(Java Archive)文件。本篇文章将详细介绍如何使用C++编写一个小程序来...
`selenium-java.jar` 是一个与 Selenium 相关的 Java 库文件,它包含了用于在 Windows 和 Mac 操作系统上执行自动化测试的组件。Selenium 是一款广泛使用的开源工具,主要用于 web 浏览器自动化,帮助开发者和测试...
Java开发中的JAR(Java Archive)包是Java平台特有的文件格式,用于集合多个类文件、相关的元数据和其他资源,便于程序的部署和运行。在Java应用程序中,JAR包允许开发者将众多类文件打包在一起,方便管理和执行。...
在Java编程环境中,有时我们需要将多个类打包成一个可执行的JAR(Java Archive)文件,以便于分发和执行。这个过程涉及到编译Java源代码、创建类路径(classpath)、构建MANIFEST.MF文件以及最终打包成JAR。下面我们...
标题中的“tomcat部署java项目jar”指的是在Apache Tomcat服务器上部署Java Web应用程序,通常以JAR(Java Archive)格式打包。Tomcat是一个开源的轻量级应用服务器,主要用于运行Servlet和JSP(JavaServer Pages)...
6. **打包与运行**:使用`jar`命令行工具或者构建工具如Maven、Gradle,开发者可以创建、更新和提取JAR文件。运行JAR文件,可以用`java -jar`命令。 7. **类路径(Classpath)**:在Java环境中,JAR文件需要被添加...
使用SSH2进行自动部署,你可以编写Java代码来连接到目标服务器,执行预定义的部署脚本,如解压应用、启动服务、更新配置等。这样,整个部署过程无需人工介入,大大提高了效率。 WebSocket,另一方面,是HTML5引入的...
通常,你只需选择目标jar文件,工具就会自动进行反编译并显示源代码。 总的来说,Java jar包反编译是一个技术性强且实用的技能,通过合适的工具可以有效地帮助我们理解和学习jar包中的代码逻辑。在实际操作中,除了...
本Bash脚本用于自动化管理Java JAR应用的启动、停止及监控。首先检查JAR进程是否在运行,如在运行则安全终止。随后,使用预设的Java参数启动JAR文件,并将输出和错误日志重定向至日志文件。启动后,脚本持续监控JAR...
总结来说,Java JAR包在Android SSH环境下扮演了重要角色,提供了实现远程控制、自动化任务和安全通信的能力。开发者应熟悉如何正确使用和管理JAR包,以优化项目结构,提升应用性能,并确保安全性。
【Selenium-Java 3.7.1.jar】是一个关键组件,主要用于自动化Web应用程序的测试。这个特定的版本,3.7.1,是Selenium WebDriver的一个Java绑定,它允许开发者使用Java语言来编写测试脚本,从而实现对浏览器的自动化...
- 工具会自动解析JAR内的类文件,展示对应的源代码。 - 你可以通过源代码视图导航类和方法,甚至搜索特定代码。 5. **其他JAR查看工具** 除了`jd-gui`,还有许多其他的JAR查看工具,例如: - **JAR Explorer**...
标题中的“基于SpringBoot的自动更新”指的是在SpringBoot应用中实现自动化更新的功能,使得应用程序能够在运行时自动检测并下载最新的版本,无需手动重启服务。这通常涉及到版本控制、网络请求、文件处理等多个技术...