簡體   English   中英

在Java中使用空格運行外部exe

[英]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.

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