首頁 >Java >java教程 >Runtime.exec() 與 ProcessBuilder:為什麼我的指令會退出並顯示程式碼 1001?

Runtime.exec() 與 ProcessBuilder:為什麼我的指令會退出並顯示程式碼 1001?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-29 13:32:09698瀏覽

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

ProcessBuilder 與Runtime.exec():比較

從Java 執行外部指令時,開發者常會在使用Runtime 之間遇到困境。 getRuntime().exec(...) 和 new ProcessBuilder(...).start()。為了闡明這兩種方法之間的差異,讓我們詳細檢查它們的行為。

案例研究

在 Runtime.exec() 和ProcessBuilder 被用來執行特定的命令,出現了顯著的差異。使用 Runtime.exec(),指令成功終止,退出值為 0。但是,使用 ProcessBuilder 時,退出值為 1001,指令提前終止。

根本原因

差異在於 exec() 和 ProcessBuilder 處理指令參數的方式。 exec() 接受單一字串或字串陣列,將輸入標記為參數。相反,ProcessBuilder 需要一個 varargs 字串陣列或一個 List,其中每個元素都被視為一個單獨的參數。

解決問題使用 ProcessBuilder,確保命令參數作為單獨的字串提供。例如,不要使用以下內容:

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

使用此:

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

或者,您可以建立List並將其傳遞給ProcessBuilder,如下所示:

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

以上是Runtime.exec() 與 ProcessBuilder:為什麼我的指令會退出並顯示程式碼 1001?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn