Java Process.waitFor()不是;“等待”;为当前线程完成

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 + " " +

我有一个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 + " " + 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窗口。