2016-08-04 3 views
1

Я хочу запустить файл jar из моей java-программы.Как запустить файл jar и запустить терминал из java-программы?

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "parallel/Parallel.jar", "aug/*.xml"); 
Process p = pb.start(); 
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String s = ""; 
while((s = in.readLine()) != null){ 
    System.out.println(s); 
} 
int status = p.waitFor(); 
System.out.println("Exited with status: " + status); 

Вот журнал ошибок я получаю:

[33mProblem found trying to create the log file[0m 
[31mCannot locate configuration source aug/*.xml[0m 
[31mNo files to work with[0m 
Exited with status: 1 

Проблема 1: Я пытался использовать целое имя файла вместо * и она работает. Но я хочу запустить jar на ВСЕХ файлах под каталогом.

Задача 2: при запуске файл jar запросит некоторый ввод «продолжить» или «отменить». Но программа jar просто выходит в консоли Eclipse, не давая мне возможности что-либо вводить. Итак, мне интересно, есть ли способ запустить файл jar внутри терминала?

+0

Просьба предоставить более подробную информацию о том, что ваш JAR 'parallel/Parallel.jar'. Если этот JAR требует ввода, вы должны использовать http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#getOutputStream() –

+0

Вы уверены, что он просто выходит в Eclipse (когда вы предоставить ему действительное имя файла), а не ждать ввода, который никогда не поступает из труб? – RealSkeptic

ответ

0

Для 1. aug/*. Xml не работает, потому что разворачивание шаблона выполняется с помощью cmd/bash. Если вы хотите использовать его таким образом, ваша банка должна будет иметь возможность развернуть эту строку или вам придется называть ее с помощью cmd/bash. Было бы предпочтительнее позволить вашей программе Java Parallel развернуть это, чтобы вы не потеряли переносимость.

Для 2. Чтобы запустить его из терминала можно использовать ProcessBuilder или Runtime.exec() Что-то вроде, что на окнах: (окна CMD необходим путь или он не будет решить подстановочные)

Process process = Runtime.getRuntime().exec("cmd /k start java -jar <path>/Parallel.jar <path>/aug/*.xml"); 

"/ k" сохраняет терминал активным. «start» открывает терминал, а не просто выполняет команду.

С ProcessBuilder это должно быть что-то вроде:

ProcessBuilder pb = new ProcessBuilder("cmd", "/k", "start", "java", "-jar", "<path>/Parallel.jar", "<path>/aug/*.xml"); 

Для Баш было бы по этой линии:

ProcessBuilder pb = new ProcessBuilder("sh", "-c", "java", "-jar", "<path>/Parallel.jar", "<path>/aug/*.xml"); 

Для дальнейшего чтения о ProcessBuilder/Runtime.exec() Я хотел бы предложить: http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html

Смежные вопросы