【发布时间】:2012-07-25 11:48:20
【问题描述】:
我正在编写一个带有 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){}
【问题讨论】:
-
我不明白你的问题。是cmd还是java问题? 在完成下一步之前等待进程运行?下一步是什么?
-
两者,我想。我不希望在 FORTRAN 代码运行 30 秒之前调用“mpost solution.mp”行。上面的 FORTRAN 代码运行了 30 秒,但是上面 sn-p 之后的 Java 代码返回了在上面的代码中重新编译之前的旧版本的 solution.ps。
标签: java io cmd fortran fortran77