Rumah > Java > javaTutorial > ProcessBuilder vs Runtime.exec(): Mengapa Mereka Berkelakuan Berbeza Apabila Melaksanakan Perintah Luaran?

ProcessBuilder vs Runtime.exec(): Mengapa Mereka Berkelakuan Berbeza Apabila Melaksanakan Perintah Luaran?

Barbara Streisand
Lepaskan: 2024-11-15 02:54:02
asal
854 orang telah melayarinya

ProcessBuilder vs Runtime.exec(): Why Do They Behave Differently When Executing External Commands?

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");
Salin selepas log masuk

Sebagai alternatif, Senarai boleh digunakan:

List<String> params = java.util.Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2");
ProcessBuilder b = new ProcessBuilder(params);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan