使用Java ProcessBuilder运行Jar可以获得null输出

时间:2014-06-26 00:30:18

标签: java jar processbuilder yui-compressor

我一直在尝试使用以下代码。

package com.compressor;

 import java.io.BufferedReader;
 import java.io.File;
 import java.io.InputStreamReader;

 public class JSCompressor {

 public static void main(String[] args) {

    try {

        String currentDir = System.getProperty("user.dir");

        String[] commands = { "java", "-jar","yuicompressor.jar"};

        ProcessBuilder pb = new ProcessBuilder(commands);
        pb.directory(new File(currentDir));

        Process p = pb.start();

        BufferedReader output = new BufferedReader(new InputStreamReader(p.getInputStream()));
        System.out.println("Result : " + output.readLine());                            


    } catch (Exception ex) {
        ex.printStackTrace();
    }

}

 }

我的项目目录如下图所示:

enter image description here

但是当我在eclipse中运行程序时,它给出了如下所示的null输出:

结果:null

我尝试使用谷歌搜索几个选项但没有成功。谁能指出我在这里做错了什么?。

我正在测试的jar确实是可运行的,并且在命令行中正常运行时给出输出。但我需要能够以编程方式运行这个jar。有人可以帮忙吗?。

1 个答案:

答案 0 :(得分:1)

我想你要改变

String[] commands = { "java", "-jar","yuicompressor.jar"};

String[] commands = { "java", "-jar", jarPath};

因为这是yuicompressor.jar的路径。此外,您应该使用另一个线程来读取进程输出 - 并等待进程完成。

final Process p = pb.start();
// then start a thread to read the output.
new Thread(new Runnable() {
  public void run() {
    BufferedReader output = new BufferedReader(
        new InputStreamReader(p.getInputStream()));
    String line;
    System.out.print("Result : ");
    while ((line = output.readLine()) != null) {
     System.out.println(line);
    }
  }
}).start();
p.waitFor();