[英]running external exe with spaces in java
我已經嘗試了4個小時才能運行此程序,但我卻不理解為什么這樣做://
我用GUI創建了一個非常簡單的Java程序,其中包含2個文本框,人們可以在其中鍵入exe文件的路徑。 單擊按鈕后,它將讀取此框中的文本並運行相應的軟件。
當人們在目錄框中鍵入“ C:\\ Program Files(x86)\\ thatsoftware \\”,並在要運行的文件中鍵入“ C:\\ Program Files(x86)\\ thatsoftware \\ run this.exe -arg”時,這似乎起作用框:
Runtime.getRuntime().exec(txtFile.getText().toString(), null, new File(txtPath.getText().toString()));
但是,當我僅設置1個目錄框並附加(硬編碼)文件和參數時,它將不起作用:
String fileToRun=txtPath.getText().toString()+"run this.exe -arg";
Runtime.getRuntime().exec(fileToRun, null, new File(txtPath.getText().toString()));
我也嘗試將文件作為數組傳遞:
String fileToRun[]={txtPath.getText().toString(),"run this.exe"," -arg"};
Runtime.getRuntime().exec(fileToRun, null, new File(txtPath.getText().toString()));
無濟於事。 當我嘗試將其作為processbuilder運行時,會彈出同樣的問題。 我將收到類似“文件C:\\ Program Files(x86)\\ thatsoftware \\ -arg”不存在的錯誤消息。很奇怪,因為傳遞了參數,但顯然沒有文件名。
當用戶在文本框中鍵入整個字符串時,我可以設法運行它,但是如果我在代碼中添加了參數和或文件名,則無法運行它。 誰能這么仁慈地向我解釋一下,並告訴我如何僅用一個文本框就能做到?
您需要將可執行文件包裝在轉義引號\\“中,如下所示:
Runtime runtime = Runtime.getRuntime();
Process ps = runtime.exec("\"run this.exe\"");
或根據需要使用路徑和參數:
Process ps = runtime.exec("\"C:\\Program Files (x86)\\Thatsoftware\\my exe.bat\" -arg");
據我所知,您必須將每個元素都放在單獨的字段中:
String fileToRun[]={
txtPath.getText().toString(),
"run",
"this.exe",
" -arg"
};
我不知道您是否使用Swing
,但是Swing
具有javax.swing.JFileChooser
。
//config fileChooser
JFileChooser fc = new JFileChooser(lastOpenDir);
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc.setDialogTitle("Load Beacon List");
fc.removeChoosableFileFilter(fc.getFileFilter()); //remove the default file filter
FileFilter filter = new FileNameExtensionFilter("EXE file", "exe");
fc.addChoosableFileFilter(filter); //add XML file filter
//show dialog
int returnVal = fc.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION){
File selectedDir = fc.getSelectedFile();
...
男孩,我感覺像個白痴嗎... Java錯誤使我失望,但問題是在“運行this.exe”之前缺少斜杠。
太可惜了...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.