我正在尝试编写一个Java程序,它将在Windows命令提示符下执行一行代码。我想使用外部程序(7-Zip)来提取一些RAR文件(它比这更复杂,但对于手头的问题无关紧要。)
我获得了Runtime实例并使用了.exec()方法。当我尝试自己提取一个存档时它工作正常,但是当我尝试同时提取多个存档时,进程被挂起并且.waitFor()永远不会返回。
我研究了这个问题,并认为它是由该过程产生的输出引起的。似乎某些缓冲区或其他缓冲区正在填满并锁定程序。我被概述了here。我实现了这个解决方案(除了我使用了一个imput流并将它指向一个文件),它确实有效。但是,编写所有完全不必要的输出似乎需要花费很多额外的时间。
我想知道是否有办法欺骗BufferedReader认为它已写入其缓冲区中的所有内容而不实际编写它?
感谢您一直读到最底层!
答案 0 :(得分:1)
这不是挂起的Java部分,它是本机应用程序,当它无法再写出输出时会阻塞。
既然您已经拥有使其在Java中运行的代码,为什么不坚持使用它?
下一个最佳选择是使外部进程不产生任何输出。也许有一个“沉默”的旗帜?在Linux上,你也可以管道到/ dev / null,不确定是否Windows has an equivalent(我想你可以管道进入文件)。