1 回答
TA贡献1843条经验 获得超7个赞
分析
在提供的代码段中,程序及其参数作为方法参数作为单个字符串值传递ProcessBuilder ProcessBuilder.command(String... command)
。
但事实并非如此:相反,程序及其参数应该分开传递。
解决方案
让我们使用该ProcessBuilder ProcessBuilder.command(List<String> command)
方法。
我们将适当地准备字符串列表:它将包含程序及其参数。
解决方案草案:
public List<String> getProgramAndArguments(PMDParameters params) {
final List<String> programAndArguments = new ArrayList<String>();
programAndArguments.add("cmd");
programAndArguments.add("/c");
programAndArguments.add("pmd");
programAndArguments.add("-d");
programAndArguments.add(params.getSourceCodePath());
programAndArguments.add("-f");
programAndArguments.add(params.getOutputFormat());
programAndArguments.add("-R");
programAndArguments.add(params.getResultSet());
programAndArguments.add(">");
programAndArguments.add(params.getResultsPath());
return programAndArguments;
}
public void runAnalyzer(PMDParameters params) throws IOException, InterruptedException {
createProcess();
processBuilder.command(getProgramAndArguments(params));
final Process process = processBuilder.start();
process.waitFor();
}
此外,请通过提供正确的输入来确保params.getResultsPath()具有正确的值:现在是.。
添加回答
举报