我现在已经尝试了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”不存在。“非常奇怪,因为参数已通过,但显然不是文件名。
我可以设法在用户在文本框中输入整个字符串时运行它,但是如果我在代码中添加参数和/或文件名则不行。 任何人都可以如此友好地向我解释这一点,并说明如何只用一个文本框来完成它?
答案 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"
};
我不知道您是否使用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();
...
答案 2 :(得分:0)
这么多羞耻......