2017-02-23 20 views
0

我有一个项目使用ProcessBuilder来捕获命令“java -jar someJar.jar -argument”的输出,但现在已经将jar的源文件移动到单独的包中; somepackage。该包有一个主函数,所以我想创建一个ProcessBuilder来捕获该进程的输出,就好像它是一个不同的Thread一样。使用ProcessBuilder捕获单独包的输出

这是可能的,还是我将不得不完全重新编写代码以允许它使用源文件而不是二进制文件?

+0

你混合的条件来混淆视听的方式。 “你现在把jar的源文件移动到一个单独的包中”是什么意思?为什么这会提高运行“源文件而不是二进制文件”的愿望(当然,如果不编译它们,这是不可能的)? – Holger

回答

0

如果我假设是正确的,软件包有主要功能,我们正在尝试获取使用java -jar processbuilder命令执行的主要方法的输出。

ProcessBuilder pb = new ProcessBuilder(your java -jar command);  
Process process = pb .start(); 
process.waitFor(); 
BufferedInputStream in = new BufferedInputStream(process.getInputStream()); 
byte[] contents = new byte[1024]; 
int jwtOytputBytesRead = 0; 
String Output = ""; 
while ((jwtOytputBytesRead = in.read(contents)) != -1) { 
      Output += new String(contents, 0, jwtOytputBytesRead); 
    } 
System.out.println(Output); 

尝试此链接,以及指定主类 Run class in Jar file

+0

是的,这就是我想要做的,但它需要线程化,因为我需要不断从它获取输出。 –

+0

如何尝试在 java中可调用。示例:public class ProcessBuilderProcessor implements Callable {}然后使用执行程序\t \t ProcessBuilderProcessor pbp = new ProcessBuilderProcessor(“”); \t \t ExecutorService executr = Executors.newFixedThreadPool(1); \t \t Future future1 = executr.submit(pbp); – HaroonIsmailbasha