在程序运行的过程中,我们可能需要更改一些配置,如果配置更改得很大的话,就可能会需要程序重新启动,但是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这个类都是在万不得已的情况下才用的,因为用了它以后,程序很难保证可移植性,除非你在每个平台上都找到相应的命令执行相应的事情.
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
public class ProcessBuilderTest {
public static void main(String[] args) throws IOException {
ProcessBuilder pb = new ProcessBuilder("java", "Test2");
pb.directory(new File("/Users/Biao/Desktop/"));
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println("End");
}
}
From: http://www.blogjava.net/hadeslee/archive/2007/09/27/148616.html