ProcessBuilder vs. Runtime.exec(): Menganalisis Percanggahan
Apabila melaksanakan arahan luaran dalam Java, seseorang mungkin menghadapi percanggahan antara Runtime. getRuntime().exec(...) dan ProcessBuilder(...).start(). Penerokaan berikut bertujuan untuk menjelaskan perbezaan ini dan menyediakan penyelesaian untuk mencapai tingkah laku yang konsisten.
Pengendalian Argumen Lalai
Satu perbezaan utama antara kedua-dua pendekatan terletak pada pengendaliannya daripada hujah. Runtime.getRuntime().exec() menjangkakan satu rentetan atau tatasusunan rentetan, manakala ProcessBuilder menjangkakan tatasusunan rentetan atau Senarai rentetan. Apabila menggunakan exec() dengan rentetan tunggal, ia secara dalaman menandakan rentetan untuk mencipta tatasusunan argumen.
Gelagat ProcessBuilder
Dalam kes ProcessBuilder, hujah diluluskan sebagai tatasusunan atau senarai, di mana setiap elemen mewakili hujah. Walau bagaimanapun, jika rentetan tidak ditandakan dengan betul, satu hujah akan terbentuk, termasuk sebarang ruang. Ini boleh membawa kepada tingkah laku yang tidak dijangka, seperti dalam contoh yang diberikan di mana arahan tidak dilaksanakan dengan betul.
Penyelesaian
Untuk menyelesaikan isu ini dengan ProcessBuilder, pastikan bahawa hujah ditandakan dengan betul:
ProcessBuilder b = new ProcessBuilder("C:\DoStuff.exe", "-arg1", "-arg2");
Sebagai alternatif, Senarai boleh digunakan:
List<String> params = java.util.Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2"); ProcessBuilder b = new ProcessBuilder(params);
Dengan pra-tokenizing hujah, tingkah laku yang diingini boleh dicapai.
Atas ialah kandungan terperinci ProcessBuilder vs Runtime.exec(): Mengapa Mereka Berkelakuan Berbeza Apabila Melaksanakan Perintah Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!