【发布时间】:2021-12-03 23:43:50
【问题描述】:
所以我有两个文件:Main.java 和 Second.java。我想使用 ProcessBuilder 处理流程。使用 cmd 我可以编写“javac Second.java”和“java Second 5”。我的 Second.java 是这样的
public static void main(String[] args) {
System.out.println("Okay");
System.out.println(Integer.parseInt(args[0])); // I need it just for checking
System.exit( Integer.parseInt(args[0]));
}
我的第二个进程应该返回特定的退出值(这就是我使用 System.exit() 的原因)。 我知道 ProcessBuilder 不是 cmd。我试着这样运行它
Path currentRelativePath = Paths.get("");
String curDir=currentRelativePath.toAbsolutePath().toString();
curDir=curDir+"\\src";
ProcessBuilder PB=new ProcessBuilder("java",curDir, "second", "5");
try {
Process process = PB.start();
process.waitFor();
System.out.println(process.exitValue());
}catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但这不起作用。 我想我不需要完全在我的程序中创建类文件,我稍后将通过 cmd 创建它们。 如何在 Second.main() 中提供我需要的 ProcessBuilder String[] args?
【问题讨论】:
-
为什么要将其他 Java 类称为单独的进程,而不是将它们作为 Java API 调用?
-
您将目录名称传递给
java,这是无效的。您是否忘记了"-cp"参数?此外,您正在传递带有小写s的"second",如果类名是带有大写S的Second,则会失败。您可以使用currentRelativePath删除所有这些代码,只需编写String curDir = "src";,因为所有路径要么是绝对路径,要么隐含相对于当前目录。 -
@LouisWasserman 我是一名学生,这是我的任务。我需要创建一个项目,用户将在其中输入一些输入参数,然后我的 main 使用此参数启动两个进程。例如,用户输入 f 5,然后输入 g 3。我需要启动 second 两次(如果可能,同时启动),第一次使用参数 f 5,第二次使用 g 3。在 Second.java 中将类似于 [ if (args[0]=="f"){does something} else if (args[0]=="g"){...} else exitvalue error]。另外我不明白您在“将它们作为 Java API 调用”中的意思
-
@VGR 哦,谢谢,它适用于“-cp”,我会读到它。您可以将其发布为答案吗?
标签: java process processbuilder