我有一个Java程序,可以在OS中执行特定的命令。我还使用Process.waitfor()在下面的代码中显示,指示执行是成功完成还是失败。
我的问题是,有没有其他方法可以避免使用process.waitfor(),有没有办法在进程完成之前使用while循环并执行某些操作?
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(cmdFull);
BufferedReader inStream = new BufferedReader(new InputStreamReader(p.getInputStream()));
String inStreamLine = null;
String inStreamLinebyLine=null;
while((inStreamLine = inStream.readLine()) == null) {
inStreamLinebyLine = inStreamLinebyLine+"\n"+inStreamLine;
}
try {
rc = p.waitFor();
} catch (InterruptedException intexc) {
System.out.println("Interrupted Exception on waitFor: " +
intexc.getMessage());
}
我想做什么,是这样的
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(cmdFull);
BufferedReader inStream = new BufferedReader(new InputStreamReader(p.getInputStream()));
String inStreamLine = null;
String inStreamLinebyLine=null;
while((inStreamLine = inStream.readLine()) == null) {
inStreamLinebyLine = inStreamLinebyLine+"\n"+inStreamLine;
}
try {
while ((rc = p.waitFor()) == true ) { // This is made up, I don't even think it would work
System.out.println('Process is going on...');
}
} catch (InterruptedException intexc) {
System.out.println("Interrupted Exception on waitFor: " +
intexc.getMessage());
}
谢谢,
答案 0 :(得分:1)
您可以在开始此过程之前生成新线程。
新线程将负责打印出“正在进行的过程......”或任何需要的内容。
在p.waitFor()完成后,启动进程的主线程将向新线程指示它应该停止运行。
答案 1 :(得分:1)
你可以生成一个新的thread并在线程中进行等待,通过共享变量定期检查主线程是否等待线程已经完成。
答案 2 :(得分:1)
也许这样的事情会起作用。创建一个名为@tschaible建议的线程,然后在超时(这是你在代码中组成的部分)的那个线程上进行连接。它看起来像这样:
Thread t = new Thread(new Runnable() {
public void run() {
// stuff your code here
}
});
t.run();
while (t.isAlive()) {
t.join(1000); // wait for one second
System.out.println("still waiting");
}
这样做是将代码作为单独的线程启动,然后测试胎面是否每秒完成一次。 while循环应该在线程完成并且不再存在时结束。您可能必须检查InterruptedException但我现在无法测试。
希望这能让你朝着正确的方向前进。