0

我已经尝试了 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()));

但是,当我只设置 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”不存在。”很奇怪,因为参数已传递,但显然不是文件名。

当用户在文本框中键入整个字符串时,我可以设法运行它,但如果我在代码中添加参数和/或文件名,则无法运行它。有人能这么好心地向我解释一下,并告诉我如何只用一个文本框来完成吗?

4

3 回答 3

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");
于 2013-08-30T11:56:08.553 回答
0

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

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

不知道你有Swing没有用,但是Swingjavax.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();
...
于 2013-08-30T11:56:31.407 回答
0

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

这么多耻辱...

于 2013-09-02T19:49:55.787 回答