Chúng ta cần khoảng trống giữa lý luận trong commandline vì dòng lệnh cần phải biết đó là đối số đầu tiên, đó là lần thứ hai và vân vân. Tuy nhiên khi chúng tôi sử dụng ProcessBuilder
, chúng tôi có thể chuyển một mảng cho nó, vì vậy chúng tôi không cần phải thêm những khoảng trống đó để phân biệt các đối số. ProcessBuilder sẽ trực tiếp truyền mảng lệnh tới exec
sau khi kiểm tra. Ví dụ:
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);
Mã trên sẽ hoạt động hoàn hảo.
Hơn nữa, bạn có thể sử dụng
Runtime.getRuntime().exec("java -cp C:/testt Test");
Nhưng đó là thuận tiện hơn để sử dụng ProcessBuilder, một lý do là nếu tranh cãi của chúng tôi bao gồm không gian chúng ta cần phải vượt qua quote trong Runtime.getRuntime().exec()
như java -cp C:/testt \"argument with space\"
, nhưng với ProcessBuilder chúng tôi có thể nhận được bỏ nó đi.
ProcessBuilder processBuilder = new ProcessBuilder("command", "The first argument", "TheSecondWithoutSpace");
bạn đã làm một công việc tốt – darijan