2017-02-23 25 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

как насчет Trying, вызываемого в java. Пример: открытый класс ProcessBuilderProcessor реализует Callable {} Затем используйте исполнитель \t \t ProcessBuilderProcessor pbp = new ProcessBuilderProcessor (""); \t \t ExecutorService executr = Executors.newFixedThreadPool (1); \t \t Будущее future1 = executr.submit (pbp); – HaroonIsmailbasha