如下:单独把cmd里的东西在命令行执行,没有任何问题。
但是用java代码执行,就会阻塞Process process;
String cmd="indexer --config c:/sphinx.conf articleIndex645672748";
process = Runtime.getRuntime().exec(cmd);
process.waitFor();
System.out.println("indexer ok !");
//下面还有命令,所以需要等这个进程完成后再往下执行
cmd = "...";

解决方案 »

  1.   

    我是猜的,lz可以用getErrorStream(),getInputStream()读一下流,看看可以不。
      

  2.   

    "indexer ok !"这句话打印出来了吗?
    加上这句   int i = process.waitFor(); System.out.println("i>>>"+i);
    看下i是多少,if是0表示正常结束进程,else就是你进程没正常结束。
      

  3.   

    waitFor
    public abstract int waitFor()
                         throws InterruptedException导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程。 返回:
    进程的出口值。根据惯例,0 表示正常终止。 
    抛出: 
    InterruptedException - 如果当前线程在等待时被另一线程中断,则停止等待,抛出 InterruptedException。
      

  4.   

    奇怪,为什么加上输出就可以运行完了呢,我加了下面的代码就可以了。为什么呢?BufferedInputStream fo = new BufferedInputStream(process.getInputStream());
    int a = -1;
    while((a=fo.read())!=-1){
    System.out.print((char)a);
    }
      

  5.   

    在process.waitFor()已经堵塞了,无法获取到i值的
      

  6.   

    那也太神了吧
    我输出后就可以执行完成输出 indexer ok!
    不输出就死在那儿