在程序運行的過程中,我們可能需要更改一些配置,如果配置更改得很大的話,就可能會需要程序重新啟動,但是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