Firstly, I want to excute batch file with java language:
Process proc = Runtime.getRuntime().exec("cmd.bat");
It runs correctly, but I find that it excute next statement immediately. As I want to pause the program till batch file excuted completely, I invoke below function.
proc.waitFor();
Thus program will pause when it excute batch file, but meet another issue, it won't exit till throw an exception.
looked up resource documents and find that it has to return processing infor to main thread, otherwise it will lock thread. So get below code from web. That is very useful for the problem.
final InputStream is1 = proc.getInputStream();
final InputStream is2 = proc.getErrorStream();
new Thread() {
public void run() {
BufferedReader br = new BufferedReader(
new InputStreamReader(is1));
try {
String lineB = null;
while ((lineB = br.readLine()) != null ){
if(lineB != null)logger.info(lineB);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
new Thread() {
public void run() {
BufferedReader br2 = new BufferedReader(
new InputStreamReader(is2));
try {
String lineC = null;
while ( (lineC = br2.readLine()) != null){
if(lineC != null)logger.info(lineC);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
By now, the batch file can be excuted successfully.
Another note is you can not use a '/' instead of '/' in windows server 2005/2008 (Maybe NT series) though it is not important in xp/vista/win 7.