java等待bat执行完毕,用Java运行bat文件并等待2

Java执行批处理文件问题
本文探讨了在Java中执行批处理文件时遇到的问题,包括使用Runtime.getRuntime().exec()方法执行批处理文件后如何正确处理输出流和错误流,以及如何确保进程能够正常结束。

这是我的另一个问题的后续问题:

Run bat file in Java and wait

我将此作为一个单独的问题发布的原因是我已经问过的问题得到了正确回答.从我的一些研究中我的问题是我的案例所独有的所以我决定创建一个新问题.请继续阅读这个问题,因为它们密切相关.

运行建议的代码会在waitFor调用时阻塞程序.经过一些研究后,我发现waitFor方法会阻止你的进程是否有需要被处理的输出,所以你应该首先清空输出流和错误流.我做了那些事,但我的方法仍然阻止.然后我找到了一个简单循环的建议,在等待exitValue方法返回进程的退出值并处理抛出的异常(如果不是),暂停一小段时间以便不占用所有CPU.我这样做了:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class Test {

public static void main(String[] args) {

try {

Process p = Runtime.getRuntime().exec(

"cmd /k start SQLScriptsToRun.bat" + " -UuserName -Ppassword"

+ " projectName");

final BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

final BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream()));

new Thread(new Runnable() {

@Override

public void run() {

try {

while (input.readLine()!=null) {}

} catch (IOException e) {

e.printStackTrace();

}

}

}).start();

new Thread(new Runnable() {

@Override

public void run() {

try {

while (error.readLine()!=null) {}

} catch (IOException e) {

e.printStackTrace();

}

}

}).start();

int i = 0;

boolean finished = false;

while (!finished) {

try {

i = p.exitValue();

finished = true;

} catch (IllegalThreadStateException e) {

e.printStackTrace();

try {

Thread.sleep(500);

} catch (InterruptedException e1) {

e1.printStackTrace();

}

}

}

System.out.println(i);

} catch (IOException e) {

e.printStackTrace();

}

}

}

但我的过程不会结束!我一直收到这个错误:

java.lang.IllegalThreadStateException: process has not exited

有关为什么我的流程不会退出的任何想法?或者你有任何库建议处理正确执行批处理文件并等待执行完成?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值