Abbiamo bisogno di spazi tra gli argomenti a riga di comando perché la riga di comando ha bisogno di sapere che è il primo argomento, che è il secondo e così via. Tuttavia, quando usiamo ProcessBuilder
, possiamo passare un array ad esso, quindi non abbiamo bisogno di aggiungere quegli spazi per differenziare gli argomenti. ProcessBuilder passerà direttamente l'array di comandi allo exec
dopo un controllo. Ad esempio,
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);
Il codice sopra funzionerà perfettamente.
Inoltre, è possibile utilizzare
Runtime.getRuntime().exec("java -cp C:/testt Test");
ma è più comodo da usare ProcessBuilder, uno dei motivi è che se il nostro argomento contiene spazio abbiamo bisogno di passare citazione in Runtime.getRuntime().exec()
come java -cp C:/testt \"argument with space\"
, ma con ProcessBuilder possiamo ottenere liberarsene.
ProcessBuilder processBuilder = new ProcessBuilder("command", "The first argument", "TheSecondWithoutSpace");
che hai fatto un buon lavoro – darijan