Есть ли способ запустить эту командную строку в приложении Java?
java -jar map.jar time.rel test.txt debug
Я могу запустить его с помощью команды, но не смог сделать это в Java.
Есть ли способ запустить эту командную строку в приложении Java?
java -jar map.jar time.rel test.txt debug
Я могу запустить его с помощью команды, но не смог сделать это в Java.
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("java -jar map.jar time.rel test.txt debug");
http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html
Вы также можете посмотреть вывод следующим образом:
final Process p = Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");
new Thread(new Runnable() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
try {
while ((line = input.readLine()) != null)
System.out.println(line);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
p.waitFor();
И не забывайте, что если вы работаете в Windows, вам нужно поставить "cmd/c" перед вашей командой.
Чтобы избежать блокирования вызываемого процесса, если он выводит много данных на стандартный вывод и/или ошибку, вы должны использовать решение, предоставленное Craigo. Обратите внимание также, что ProcessBuilder лучше, чем Runtime.getRuntime(). Exec(). Это связано с несколькими причинами: он значительно улучшает аргументы, а также заботится о стандартном выпуске ошибки (также проверьте здесь).
ProcessBuilder builder = new ProcessBuilder("cmd", "arg1", ...);
builder.redirectErrorStream(true);
final Process process = builder.start();
// Watch the process
watch(process);
Я использую новую функцию "смотреть", чтобы собрать эти данные в новом потоке. Этот поток завершится в вызывающем процессе, когда вызываемый процесс завершится.
private static void watch(final Process process) {
new Thread() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
try {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
import java.io.*;
Process p = Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");
Считайте следующее, если у вас возникнут какие-либо дополнительные проблемы, но я предполагаю, что приведенное выше будет работать для вас:
Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");
Process p = Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");
Пробовали ли вы команду exec в классе Runtime?
Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug")
как насчет
public class CmdExec {
public static Scanner s = null;
public static void main(String[] args) throws InterruptedException, IOException {
s = new Scanner(System.in);
System.out.print("$ ");
String cmd = s.nextLine();
final Process p = Runtime.getRuntime().exec(cmd);
new Thread(new Runnable() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
try {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
p.waitFor();
}
}