`
darkma
  • 浏览: 520965 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

ProcessBuilder实现Java应用程序自我重启

 
阅读更多

 

程序运行的过程中,我们可能需要更改一些配置,如果配置更改得很大的话,就可能会需要程序重新启动,但是JAVA并没有提供给我们直接的可以重启的方法.在这里我们将利用JDK1.5新增的ProcessBuilder来创建一个重启进程,然后自己的进程退出.

简单 代码如下:

import java.io.File;
import java.io.IOException;
import java.util.Map;

public class Test {

    
    public void restart() throws IOException{
        //用一条指定的命令去构造一个进程生成器
        ProcessBuilder pb=new ProcessBuilder("java","-Djava.ext.dirs={引用外部jar包的路径}",

        "-jar","Test.jar");
        //将这个进程的工作区空间改为F:\dist,相当于指定jvm的user.dir
        //这样的话,它就会去F:\dist目录下找Test.jar这个文件
        pb.directory(new File("F:\\dist"));
        //得到进程生成器的环境 变量,这个变量我们可以改,
        //改了以后也会反应到新起的进程里面去
        Map<String,String> map=pb.environment();
        Process p=pb.start();
        //然后就可以对p做自己想做的事情了
        //自己这个时候就可以退出了
        System.exit(0);
    }

    

    public static void main(String[] args) {

new Test().restart();

       }

}

 


在这里我们利用了ProcessBuilder这个类,这个类是一个进程的生成类,我们在起动一个进程之前可以设置好相关的一些参数,比如工作目录,环境变量等等,但是设置环境变的时候,有一个需要注意的地方就是你设置的环境变量不会改变系统原来的环境变量.也就是说即使你把path设为空,这个进程的运行的时候,依然是读取系统的path找到java这个命令,否则的话,你把path设为空,java命令是不可能找得到的.
一般来说ProcessBuilder这个类都是在万不得已的情况下才用的,因为用了它以后,程序很难保证可移植性,除非你在每个平台上都找到相应的命令执行相应的事情.

分享到:
评论

相关推荐

    Java如何基于ProcessBuilder类调用外部程序

    主要介绍了Java如何基于ProcessBuilder类调用外部程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    quine:Java中使用ProcessBuilder运行时的非空查询-“计算机娱乐

    奎因使用ProcessBuilder运行时在Java中进行非空查询-“计算机娱乐:自动复制自动机”让·米洛(Jean Millo),1972年基本上是在使用ProcessBuilder充当再现代理的全新概念上制作的。 该程序输出自己的源代码,并且...

    ProcessBuilder非阻塞是调用

    ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用

    深入研究java.lang.ProcessBuilder类.doc

    深入研究java.lang.ProcessBuilder类

    java执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    java 执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    java jdk实列宝典 光盘源代码

    15 applet java可以编写两类程序,applications和applet,applications可以在控制台直接运行,与其他高级编程语言没有太大区别,而java的特色在于它具有编制小应用程序的功能,applet可以在internet上传输并在兼容...

    java-cmd-exec:一个简单的ProcessBuilder包装器

    java-cmd-exec 一个简单的ProcessBuilder包装器 例子 公共类Md5sumCommand扩展了Command { @Override protected File directory() { return new File&#40;"."&#41;; } @Override protected String command() { ...

    08 ProcesBuilder

    个人对于java.lang.ProcessBuilder的分析

    java调用shell向DataX传递参数,where条件,包含特殊字符

    java调用shell向DataX传递参数,where条件,包含特殊字符。java调用shell向DataX传递参数,where条件,包含特殊字符

    JAVA 范例大全 光盘 资源

    实例3 在Eclipse中创建第一个Java程序 4 常见问题 javac不是内部或者外部命令 6 常见问题 找不到类文件 6 常见问题 语法错误 7 第2章 Java基础语法 9 实例4 变量和常量 9 实例5 基本数据类型转换 10 实例6 ...

    Java JDK实例宝典

    第1章 Java基础 1.1 转换基本数据类型 1.2 Java的运算符 1.3 控制程序的流程 1.4 计算阶乘 1.5 实现命令行程序 第2章 Java面向对象程序设计 2. 1 复数类 2. 2 equals.chashCode...

    Java零基础 - DOS命令del.md

    本文档介绍了如何在Java中使用ProcessBuilder类执行DOS命令。我们提供了详细的步骤说明,并附带一个简单的源码示例,演示如何使用Java代码删除文件。 内容概要 本文档涵盖以下内容: 使用Java代码执行DOS命令 使用...

    Java零基础 - ipconfig命令.md

    本文档介绍了如何在Java中使用ProcessBuilder类执行DOS命令。我们提供了详细的步骤说明,并附带一个简单的源码示例,演示如何使用Java代码获取系统的网络配置信息。 内容概要 本文档涵盖以下内容: 使用Java代码...

    java上传调用ffmpeg转码截图截取视频

    从视频上传到上传完成后用ffmpeg处理视频,转码,获取时长,缩略图,截取视频。

    hadoop2.7.1版本 hadoop.dll,winutils.exe

    hadoop2.7.1运行Wordcount错误 at java.lang.ProcessBuilder.start(ProcessBuilder.java:1012) Exception in thread "main" java.lang.UnsatisfiedLinkError

    Java零基础 - ping命令.md

    本文档介绍了如何在Java中使用ProcessBuilder类执行ping命令,以检测主机的网络连通性。我们提供了详细的步骤说明,并附带一个简单的源码示例,演示如何使用Java代码执行ping命令并解析结果。 内容概要 本文档涵盖...

    Java零基础(JDK13) - 常用DOS命令 - cd回到上级以及回到根.md

    本文档介绍了如何在Java中使用ProcessBuilder类执行常用的DOS命令。我们提供了详细的步骤说明,并附带一个简单的源码示例,演示如何使用cd命令回到上级目录以及回到根目录。 内容概要 本文档涵盖以下内容: 回到...

    java获取网卡地址

    使用的是J2SE的ProcessBuilder类执行外部的程序,相对于 Runtime.exec 它更方便,可以设置环境变量等。这里使用它在windows下读取物理网卡的地址。供大家参考。

    写给大忙人看的JAVA SE 8

    7.10 继承Java类及实现Java接口 157 7.11 异常 158 7.12 Shell脚本 159 7.12.1 执行Shell命令 159 7.12.2 字符串插值 160 7.12.3 脚本输入 161 7.13 Nashorn和JavaFX 162 练习 164 第8章杂项改进 166 8.1 字符串 168...

    Java Process Utils (Forker):用于更好地控制外部进程的 Java 库-开源

    Forker 是一个 Java 库,可让您更好地... 类似于 JSW(Java 服务包装器)和 YAJSW,但更轻量级并使用自由许可,Forker Wrapper 可用于在后台启动进程、跟踪进程 ID、捕获输出以记录日志并自动重启挂起或崩溃的 JVM 等.

Global site tag (gtag.js) - Google Analytics