来自java的外部程序不会终止

时间:2011-09-15 12:47:17

标签: java runtime exec external-process

当我尝试从java执行外部程序时,我使用下面的代码:

Process p;
rn = Runtime.getRuntime();

String[] unzip = new String[2];

unzip[0]="unzip";

unzip[1]=archive ;

public void dezip() throws IOException{

    p = rn.exec(unzip);
    int ret = p.exitValue();

System.out.println("End of unzip method");

但我的上一个System.out永远不会被执行,就像我们退出unzip方法一样。 unzip()调用仅执行了一半的工作,只有一部分存档被解压缩。 当我从命令行使用ps -xhtop时,我发现解压过程仍在此处。

请帮助。

4 个答案:

答案 0 :(得分:1)

您可能需要从进程中读取InputStream。请参阅Process

的javadoc

哪个州:

  

因为某些本机平台仅提供有限的缓冲区大小   标准输入和输出流,无法及时写入输入   流或读取子进程的输出流可能会导致   要阻止的子进程,甚至是死锁。

答案 1 :(得分:1)

检查解压缩命令是否提示输入某些内容,如果文件已经存在并且您要覆盖它,可能会发出警告。

另外,这是我在java程序中看到的反引号吗?

答案 2 :(得分:1)

  1. 确保外部程序不等待用户输入
  2. 检查在Windows系统上启动时是否引用可执行路径以处理包含空格或特殊字符的目录。
  3. PS。 我使用的是java.lang.Runtime类,但发现java.lang.ProcessBuilder类更优越。您可以指定当前工作目录,最重要的是指定系统环境。

答案 3 :(得分:0)

请尝试以下方法:

p = rn.exec(unzip);
p.waitFor()

我希望它能改变一些东西。