3

我正在编写一个带有 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){}
4

2 回答 2

3

您只运行 windows shell 命令。要修复,建议先编写批处理文件并等待它完成:

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

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

于 2012-07-25T11:58:26.093 回答
-1

尝试使用waitFor以使当前线程等待进程完成其工作。

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

您的代码中的命令不完整。并且建议使用 aProcessBuilder.start()而不是Process.

于 2012-07-25T11:52:40.000 回答