在java程序中引入延迟

Man*_*ish 2 java

我使用以下命令从我的java代码调用.exe文件:

Runtime r=Runtime.getRuntime();  
Process p=null;
p=r.exec("ABCD.exe");
Run Code Online (Sandbox Code Playgroud)

我希望程序等到exe完成它的工作.(这实际上是服务器端代码...控制在此之后传递给客户端).现在的问题是客户端的UI在服务器端的.exe之前填充可以形成所需的组件.形成的UI没有正确的文件.我尝试了正常的p.waitfor(),但它似乎没有用.有什么建议?

And*_*yle 6

简短的回答是你要在主线程中调用Process.waitFor(),正如你所提到的那样.

但是,处理进程并不是一成不变的,因为正如类javadocs所引用的那样,您可能需要读取进程的输出.如果你不这样做(在这种情况下将需要一个单独的线程),那么在许多情况下你将有一个有效的死锁 - 你的Java应用程序正在等待进程完成,但是进程正在尝试将输出写入一个完整的缓冲区,从而等待Java应用程序读取其输出.

如果您提供了有关"它不起作用"的更多信息,那么这也有助于诊断.


编辑:在完全独立的点上,初始化p为null并且然后立即重新分配它没有任何意义.你的第二行会更清晰,也不会那么混乱Process p = r.exec("ABCD.exe");.

  • 注意鸡和蛋的问题.在这些情况下,这常常被忽视.另请参阅此博客文章:[当Runtime.exec()不会]时(http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html). (3认同)