我正在尝试为本学期教授的 Java 编程类(class)创建一个自动评分器。自动评分器的基本思想是,它将我的测试人员的 .class 文件的副本放置在与学生的交作业相同的位置(每个交作业都在自己的文件夹中)。它将在文本文件中报告结果并将数据返回给我。
我遇到的问题是我无法让 ProcessBuilder 执行我的测试器类,并且我尝试了各种不同的方式来输入命令,但我不确定正确的命令是什么。这是代码:
public...main(String[] args){
///Code not relevant ommitted
Runtime runtime = Runtime.getRuntime();
for (String person : uniqueIds) {
File currentLoc = new File(HW_ID + "/" + person);
ProcessBuilder g = new ProcessBuilder("bash", "-c",
"java", " -cp ", currentLoc.getAbsolutePath(),
" Grader");
Process process = g.start();
process.waitFor();
}
}
“uniqueIds”是一个字符串数组,其中包含每个学生的 uniqueId,这是他们的作业所在的文件夹的名称。 “HW_ID”是一个常量,它是所有学生的交集所在文件夹的名称。因此文件结构为:HW_ID/uniqueID/
“Grader”是我的程序的名称,用于对提交进行评分。如何使用 ProcessBuilder 启动位于指定文件位置的 Grader 程序?
编辑:我在此使用 Mac,但如果 Windows 的代码不同,请列出两者。谢谢!
最佳答案
您需要用逗号分隔进程参数,而不是使用 +。否则,它将它们连接成单个参数“java-cp”...
... g = new ProcessBuilder("bash", "-c", "java", "-cp", ...
关于java - 使用ProcessBuilder运行多个程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21269820/