cmd java等待进程

cmd java等待进程,java,io,cmd,fortran,fortran77,Java,Io,Cmd,Fortran,Fortran77,我正在用Java GUI编写一个应用程序,它调用一些FORTRAN代码。我想返回一个文件(solution.ps),该文件根据FORTRAN代码中的更改进行更新和编译,这些更改是在我的ActionPerformed方法之前创建的。然而,我目前的代码只是返回文件的旧版本,而不是等待cmd编译的更新结果。有没有办法让cmd在完成下一步之前等待进程运行?(直接从cmd运行时工作正常) 我已经搜索过了,但除了process.waitFor()之外找不到任何东西,它似乎不会在正确的位置暂停执行。也尝试了T

我正在用Java GUI编写一个应用程序,它调用一些FORTRAN代码。我想返回一个文件(solution.ps),该文件根据FORTRAN代码中的更改进行更新和编译,这些更改是在我的ActionPerformed方法之前创建的。然而,我目前的代码只是返回文件的旧版本,而不是等待cmd编译的更新结果。有没有办法让cmd在完成下一步之前等待进程运行?(直接从cmd运行时工作正常)

我已经搜索过了,但除了process.waitFor()之外找不到任何东西,它似乎不会在正确的位置暂停执行。也尝试了Thread.waitFor()

我认为这对任何想将用户输入发送到另一个程序并返回使用这些输入的编译结果的人来说都是有用的

无论如何,这是代码,提前感谢您的帮助,我希望我把问题说清楚

String[] command ={"cmd",};
        try {
            Process p = Runtime.getRuntime().exec(command); 
            new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
            new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
            PrintWriter stdin = new PrintWriter(p.getOutputStream());
            stdin.println("cd c:\\g77");     
            stdin.println("g77setup.bat");
            stdin.println("cd c:\\users\\laurence\\workspace\\areaplanner");
            stdin.println("g77 -O4 genpack.f -o genpack");
            stdin.println("genpack");
            stdin.println("5"); 
            /* 
             * The following line sets the time to run the FORTRAN code for  
             * - need to wait for this to complete before calling mpost
             */
            stdin.println("30"); 

            stdin.println("mpost solution.mp");
            stdin.println("latex solution.tex");
            stdin.println("dvips solution.dvi -o solution.ps");
            stdin.close();
            } catch(IOException e4){}
尝试使用,使当前线程等待进程完成其任务

Process p = Runtime.getRuntime().exec(command);
p.waitFor()

代码中的命令不完整。另外,建议使用
ProcessBuilder.start()
而不是
Process

您只运行windows shell命令。要修复此问题,建议先写入批处理文件,然后等待其完成:

String command = "cmd /c mybatchfile.bat";
Process p = Runtime.getRuntime().exec(command);
p.waitFor();

要在第一组命令完成之前启动另一个部分,必须编写另一个批处理文件并重复上述步骤。确保两个进程都在单独的线程中。

我不理解您的问题。这是cmd问题还是java问题?在完成下一步之前,是否等待进程运行?下一步是什么?我想两者都是。我不希望在FORTRAN代码运行30秒之前调用行“mpost solution.mp”。在上面的代码中,FORTRAN代码运行了30秒,但是上面代码段后面的Java代码在上面的代码中重新编译之前返回了solution.ps的旧版本。我一直在尝试,几乎得到了一个完整的工作解决方案。这绝对是要走的路线,谢谢你的帮助!没问题。请随意“勾选”我的回答:)