【发布时间】:2021-05-03 19:18:06
【问题描述】:
我有一个简单的 GUI,可以选择一个可执行文件和一个批处理文件。单击“运行”应该启动一个命令行实例,然后运行给定选定批次的可执行文件。然而,打嗝似乎出现在不同的地方。这是相关代码sn -p:
String[] commands = {"cmd.exe", "/c", "C:\\Xilinx\\14.7\\ISE_DS\\settings64.bat && cd /d ",
"\"" + simFile.getParent() + "\"", " && ping localhost && ",
"\"" + jTextField1.getText() + "\"", " -tclbatch \"" + jTextField2.getText() + "\""};
ProcessBuilder simBuilder = new ProcessBuilder(commands);
simBuilder.redirectErrorStream(true);
Process simulation = simBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(simulation.getInputStream()));
String line;
while (true) {
line = reader.readLine();
if (line == null)
break;
System.out.println(line);
}
我选择通过 ProcessBuilder 而不是“Runtime.getRuntime().exec”来创建进程,因为将命令和参数作为字符串数组更具可读性和可管理性。我浏览了 Runtime、Process 和 ProcessBuilder 的文档。我还搜索了类似的问题,以下是最接近的:Run cmd commands through Java。但是,我仍然无法让所有命令正常运行(如果有的话)。第一点:程序成功执行命令,直到“ping”,我放置它以确定问题发生的位置。我通过 BufferedReader 在控制台中获得 cmd 输出就好了。但是,下一个命令应该运行由“jTextField1.getText()”指示的可执行文件,尽管我确保路径在转义的双引号内,但会给出“文件名、目录名或卷标语法不正确”的错误占空间。它在我的语法中吗?与放置双&符号的位置有关吗?是否每个带有参数的单独命令都需要是数组中自己的字符串?我尝试了不同的方法,但似乎总是导致错误。
【问题讨论】:
标签: java command-line process windows-10