在java中运行带有空格的外部exe

时间:2013-08-30 11:39:31

标签: java launch

我现在已经尝试了4个小时才能让这个东西运行,我设法做到了但却没有理解为什么:/

我创建了一个非常简单的java程序,其GUI包含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()));

但是,当我只设置一个目录框并将文件和参数附加(硬编码)时,它将不起作用:

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()));

无济于事。 当我尝试将其作为流程构建器运行时,会弹出相同类型的问题。 我将收到一条错误消息,如“文件C:\ Program Files(x86)\ thatsoftware \ -arg”不存在。“非常奇怪,因为参数已通过,但显然不是文件名。

我可以设法在用户在文本框中输入整个字符串时运行它,但是如果我在代码中添加参数和/或文件名则不行。 任何人都可以如此友好地向我解释这一点,并说明如何只用一个文本框来完成它?

3 个答案:

答案 0 :(得分:0)

您需要将可执行文件包装在转义引号中,如下所示:

Runtime runtime = Runtime.getRuntime();
Process ps = runtime.exec("\"run this.exe\"");

或者根据需要使用路径和参数:

Process ps = runtime.exec("\"C:\\Program Files (x86)\\Thatsoftware\\my exe.bat\" -arg");

答案 1 :(得分:0)

据我所知,你必须将每个元素作为单独的字段:

String fileToRun[]={
                   txtPath.getText().toString(),
                   "run",
                   "this.exe",
                   " -arg"
                    };

我不知道您是否使用SwingSwing使用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();
...

答案 2 :(得分:0)

男孩我觉得自己像个白痴...... java错误让我失望,但问题是在“运行this.exe”之前缺少斜杠。

这么多羞耻......