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
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();
Gunakan ini:
Process p = new ProcessBuilder( "C:\DoStuff.exe", "-arg1", "-arg2" ).start();
Sebagai alternatif, anda boleh mencipta Senarai
List<String> params = Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2"); Process p = new ProcessBuilder(params).start();
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!