利用ProcessBuilder实现JAVA程序的重启

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

简单 代码如下:
/*
 * Test3.java
 * 
 * Created on 2007-9-27, 11:46:31
 * 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 
*/

package  test2;

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

/**
 *
 * 
@author  hadeslee
 
*/
public   class  Test3 {
    
public   static   void  restart()  throws  IOException{
        
// 用一条指定的命令去构造一个进程生成器
        ProcessBuilder pb = new  ProcessBuilder( " java " , " -jar " , " Test3.jar " );
        
// 让这个进程的工作区空间改为F:\dist
        
// 这样的话,它就会去F:\dist目录下找Test.jar这个文件
        pb.directory( new  File( " F:\\dist " ));
        
// 得到进程生成器的环境 变量,这个变量我们可以改,
        
// 改了以后也会反应到新起的进程里面去
        Map < String,String >  map = pb.environment();
        Process p
= pb.start();
        
// 然后就可以对p做自己想做的事情了
        
// 自己这个时候就可以退出了
        System.exit( 0 );
    }
}

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

尽管千里冰封
依然拥有晴空

你我共同品味JAVA的浓香.

你可能感兴趣的:(利用ProcessBuilder实现JAVA程序的重启)