Нам нужны пробела между аргументами в командной строке, поскольку командная строка должны знать, что является первым аргументом, который является вторым и так далее. Однако, когда мы используем ProcessBuilder
, мы можем передать ему массив, поэтому нам не нужно добавлять эти пробелы, чтобы отличать аргументы. После некоторой проверки ProcessBuilder будет напрямую передавать массив команд в exec
. Например,
private static final String JAVA_CMD = "java";
private static final String CP = "-cp";
private static final String CLASS_PATH = "../bin";
private static final String PROG = "yr12.m07.b.Test";
private static final String[] CMD_ARRAY = { JAVA_CMD, CP, CLASS_PATH, PROG };
ProcessBuilder processBuilder = new ProcessBuilder(CMD_ARRAY);
Приведенный выше код будет работать отлично.
Кроме того, вы можете использовать
Runtime.getRuntime().exec("java -cp C:/testt Test");
Но удобнее использовать ProcessBuilder, одна причина заключается в том, что если наш аргумент содержит пространство, которое мы должны передать цитату в Runtime.getRuntime().exec()
как java -cp C:/testt \"argument with space\"
, но с ProcessBuilder мы можем получить Избавься от этого.
ProcessBuilder processBuilder = new ProcessBuilder("command", "The first argument", "TheSecondWithoutSpace");
вы сделали хорошую работу – darijan