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
List<String> params = Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2"); Process p = new ProcessBuilder(params).start();
以上是Runtime.exec() 與 ProcessBuilder:為什麼我的指令會退出並顯示程式碼 1001?的詳細內容。更多資訊請關注PHP中文網其他相關文章!