Java Process.waitFor()不是;“等待”;为当前线程完成
我有一个excel表,其中有一个要执行的jar文件列表。为了启动测试,我将运行一个代码来读取上述excel工作表,并在excel工作表中执行jar文件。运行这些jar文件的代码如下:Java Process.waitFor()不是;“等待”;为当前线程完成,java,process,wait,Java,Process,Wait,我有一个excel表,其中有一个要执行的jar文件列表。为了启动测试,我将运行一个代码来读取上述excel工作表,并在excel工作表中执行jar文件。运行这些jar文件的代码如下: final Process p = Runtime.getRuntime().exec("cmd /c start cmd /k java -jar " + start.jar_filepath + " " + start.tc_name + " " +
final Process p = Runtime.getRuntime().exec("cmd /c start cmd /k java -jar " + start.jar_filepath + " " + start.tc_name + " " + start.test_data + " " + start.test_result + " " + start.test_cycle);
这实际上将同时运行所有jar文件
我实际上希望一次执行一个jar,在当前jar完成执行后执行下一个jar
我补充了以下内容
p.waitFor();
但是,它的行为仍然相同,即它是同时执行的
我是否错误地使用了waitFor()命令?谢谢你的建议
更新:
下面是迭代excel工作表的代码
public static void main(final String[] args) throws IOException, Throwable {
final DataFormatter df = new DataFormatter();
final FileInputStream StartInput = new FileInputStream("c:\\TA\\TestConfig_MA.xlsx");
final XSSFWorkbook StartInputWB = new XSSFWorkbook(StartInput);
final XSSFSheet sheet = StartInputWB.getSheet("Config");
System.out.println("Amount of Row in test config : "+ sheet.getLastRowNum());
start.count = 1;
//while (start.count <= sheet.getLastRowNum()) {
for(start.count = 1; start.count <= sheet.getLastRowNum(); start.count++){
System.out.println("Total test case = " + sheet.getLastRowNum());
System.out.println(start.count);
final XSSFRow row = sheet.getRow(start.count);
start.testability = row.getCell(0).toString();
start.jar_filepath = row.getCell(1).toString();
start.tc_name = row.getCell(2).toString();
start.test_data = row.getCell(3).toString();
start.test_result = row.getCell(4).toString();
start.test_cycle = df.formatCellValue(row.getCell(5));
System.out.println("test cycle from start.jar = " + start.test_cycle);
System.out.println("Test Case Name : " + start.tc_name);
if (start.testability.equals("Y") || start.testability.equals("y)")) {
System.out.println("Test Case Name : " + start.tc_name);
System.out.println("Round : " + start.count);
final Process p = Runtime.getRuntime().exec("cmd /c start cmd /k java -jar " + start.jar_filepath + " " + start.tc_name + " " + start.test_data + " " + start.test_result + " " + start.test_cycle);
p.waitFor();
System.out.println("wait for = " +p.waitFor());
else {
System.out.println("Its a no");
}
// ++start.count;
}//for
System.out.println("test is done");
}
}
publicstaticvoidmain(最终字符串[]args)抛出IOException,Throwable{
final DataFormatter df=新的DataFormatter();
final FileInputStream StartInput=newfileinputstream(“c:\\TA\\TestConfig\u MA.xlsx”);
最终XSSF工作簿StartInputWB=新XSSF工作簿(StartInput);
最终XSSFSheet sheet=StartInputWB.getSheet(“配置”);
System.out.println(“测试配置中的行数:+sheet.getLastRowNum());
start.count=1;
//while(start.count为什么需要“cmd/c start cmd/k…”
?
运行cmd
哪个运行start
哪个运行cmd
哪个运行java
特别是,start
打开一个新窗口并立即返回。因此,p.waitFor();
将等待start
完成,但不会等待它打开的新窗口
你可能想把它缩小到简单的范围
…exec(“java-jar”+…)
或者至少
…exec(“cmd/cjava-jar”+…)
能否请您提供一个示例,说明如何在excel行上循环、如何等待以及如何处理异常。目前我们无法告诉您是否做错了什么,因为我们没有足够的数据information@Lino很乐意。让我在主要问题中加上一句。你能给我建议一下如何分配“p.waitFor”()“``到打开的窗口?我已经尝试了您的建议,但我无法运行jar文件。请建议我如何与您共享从appium获得的日志文件。此外,我还需要打开cmd窗口。