Rumah > Java > javaTutorial > Runtime.exec() vs ProcessBuilder: Mengapa Perintah Saya Keluar dengan Kod 1001?

Runtime.exec() vs ProcessBuilder: Mengapa Perintah Saya Keluar dengan Kod 1001?

Mary-Kate Olsen
Lepaskan: 2024-11-29 13:32:09
asal
731 orang telah melayarinya

Runtime.exec() vs ProcessBuilder: Why Does My Command Exit with Code 1001?

ProcessBuilder vs Runtime.exec(): Perbandingan

Apabila melaksanakan arahan luaran daripada Java, pembangun sering menghadapi dilema antara menggunakan Runtime. getRuntime().exec(...) dan ProcessBuilder(...).start(). Untuk menjelaskan perbezaan antara kedua-dua pendekatan ini, mari kita periksa tingkah laku mereka secara terperinci.

Kajian Kes

Dalam kes penggunaan di mana kedua-dua Runtime.exec() dan ProcessBuilder digunakan untuk melaksanakan arahan tertentu, perbezaan ketara timbul. Dengan Runtime.exec(), arahan ditamatkan dengan jayanya dengan nilai keluar 0. Walau bagaimanapun, apabila menggunakan ProcessBuilder, nilai keluar ialah 1001 dan perintah itu ditamatkan lebih awal.

Punca Akar

Percanggahan terletak pada cara exec() dan ProcessBuilder mengendalikan hujah arahan. exec() menerima rentetan tunggal atau tatasusunan rentetan, menandakan input ke dalam argumen. Sebaliknya, ProcessBuilder menjangkakan sama ada tatasusunan varargs rentetan atau Senarai, di mana setiap elemen dianggap sebagai hujah individu.

Penyelesaian

Untuk menyelesaikan isu dengan ProcessBuilder, pastikan hujah arahan disediakan sebagai rentetan berasingan. Sebagai contoh, bukannya yang berikut:

Process p = new ProcessBuilder(
    "C:\DoStuff.exe -arg1 -arg2"
).start();
Salin selepas log masuk

Gunakan ini:

Process p = new ProcessBuilder(
    "C:\DoStuff.exe", "-arg1", "-arg2"
).start();
Salin selepas log masuk

Sebagai alternatif, anda boleh mencipta Senarai dan serahkannya kepada ProcessBuilder seperti berikut:

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

Atas ialah kandungan terperinci Runtime.exec() vs ProcessBuilder: Mengapa Perintah Saya Keluar dengan Kod 1001?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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