簡體   English   中英

使用Runtime.getRuntime()。exec無法打開命令提示符

[英]Command prompt doesn't open with Runtime.getRuntime().exec

我創建了一個GUI(swing),該GUI執行一個批處理文件,該批處理文件包含帶有特定參數的命令提示符.exe文件執行。 當我手動運行批處理文件(通過雙擊它)時,一切都按預期進行。 問題是:命令提示符窗口不會打開以顯示進度,而且,直到我退出GUI(派生?),它才真正開始工作(僅啟動)。 當它開始工作時,它在后台某處工作,並且僅在任務管理器中可見。 僅打開一個空白的命令提示符窗口。

通過深入研究,我構建了此命令,該命令的效果與上述相同:

Runtime.getRuntime().exec("cmd.exe /c start \"Encoding\" cmd.exe /c start md \"" + Gui.outputDirField.getText() + "\\encoderOutput\" & cd \"" + Gui.outputDirField.getText() + "\\encoderOutput\" & \"" + Gui._batFile + "\" & pause");

你能幫忙嗎?

抱歉,聽起來很蠢。

這種方式對我有用:

new Thread() {
@Override public void run() {
try {    
Runtime.getRuntime().exec("cmd.exe /c start " + Gui._batFile);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}.run();

垃圾神可能出事了。 我們遇到了空間路徑問題。 摘自JRE 7u21發行說明

對Runtime.exec的更改

在Windows平台上,改進了對指定給Runtime.exec(String)Runtime.exec(String,String[])Runtime.exec(String,String[],File)方法的命令字符串的解碼,以符合規范更緊密。 對於使用這些方法中的一種或多種與程序名稱中包含空格的命令,或者使用未正確引用的命令調用這些方法的應用程序,可能會導致問題。

例如, Runtime.getRuntime().exec("C:\\\\My Programs\\\\foo.exe bar")試圖啟動帶有參數"Programs\\\\foo.exe" "C:\\\\My"的程序"C:\\\\My" "Programs\\\\foo.exe""bar" 該命令可能會失敗,並帶有一個異常,指示找不到"C:\\My"

示例Runtime.getRuntime().exec("\\"C:\\\\My Programs\\\\foo.exe\\" bar")試圖啟動程序"\\"C:\\\\My" 。此命令將失敗表示程序具有嵌入式引號的例外。

需要啟動程序名稱中帶有空格的程序的應用程序應考慮使用Runtime.exec的變體,該變體允許在數組中指定命令和參數。

另外,由於JDK 5.0使用java.lang.ProcessBuilder ,因此是創建操作系統進程的首選方法。 ProcessBuilder類具有更完整的API,用於設置環境,工作目錄和重定向流程流。

bat文件是否需要用戶交互,或者為什么要暫停命令? 如果是這樣,則Runtime.exec只會在沒有窗口的情況下運行文件,為什么要使用Window? 您可以從exec獲得一個Process對象,從該對象可以獲取InputStream(如果需要,可以獲取OutputStream),以便可以打印輸出或與流程進行交互。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM