1 回答

TA貢獻1843條經(jīng)驗 獲得超7個贊
分析
在提供的代碼段中,程序及其參數(shù)作為方法參數(shù)作為單個字符串值傳遞ProcessBuilder ProcessBuilder.command(String... command)
。
但事實并非如此:相反,程序及其參數(shù)應該分開傳遞。
解決方案
讓我們使用該ProcessBuilder ProcessBuilder.command(List<String> command)
方法。
我們將適當?shù)販蕚渥址斜恚核鼘绦蚣捌鋮?shù)。
解決方案草案:
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()具有正確的值:現(xiàn)在是.。
添加回答
舉報