ProcessBuilder 使用参数启动 .class 文件
ProcessBuilder starting a .class file with parameters
所以我有两个文件: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]));
}
我的第二个进程应该 return 特定的退出值(这就是我使用 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();
}
但这不起作用。
我想我不需要完全在我的程序中创建 class 文件,我稍后会通过 cmd 创建它们。
我怎样才能给我的 ProcessBuilder String[] args,我需要在 Second.main()?
您正在执行此命令:java 目录 second 5
这不是 java
命令的有效调用。语法是:
java
[-选项] class [args...]
传递 class 名称是正确的。传递目录不正确。
您可以通过 运行 java -h
或阅读 the documentation 自行查看语法。无需猜测允许的内容。
您 允许做的是将目录作为参数传递给 -cp
选项,这可能是您想要的:
new ProcessBuilder("java", "-cp", curDir, "second", "5");
请注意 class 名称区分大小写。如果您的 class 被命名为 Second
,您必须将相同的名称以大写 S
传递给您的 java 命令:
new ProcessBuilder("java", "-cp", curDir, "Second", "5");
↑
Uppercase S
所有文件路径要么是绝对路径,要么隐含地相对于当前目录。你不需要所有那些处理 currentRelativePath
的行。就这样写:
String curDir = "src";
所以我有两个文件: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]));
}
我的第二个进程应该 return 特定的退出值(这就是我使用 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();
}
但这不起作用。 我想我不需要完全在我的程序中创建 class 文件,我稍后会通过 cmd 创建它们。 我怎样才能给我的 ProcessBuilder String[] args,我需要在 Second.main()?
您正在执行此命令:java 目录 second 5
这不是 java
命令的有效调用。语法是:
java
[-选项] class [args...]
传递 class 名称是正确的。传递目录不正确。
您可以通过 运行 java -h
或阅读 the documentation 自行查看语法。无需猜测允许的内容。
您 允许做的是将目录作为参数传递给 -cp
选项,这可能是您想要的:
new ProcessBuilder("java", "-cp", curDir, "second", "5");
请注意 class 名称区分大小写。如果您的 class 被命名为 Second
,您必须将相同的名称以大写 S
传递给您的 java 命令:
new ProcessBuilder("java", "-cp", curDir, "Second", "5");
↑
Uppercase S
所有文件路径要么是绝对路径,要么隐含地相对于当前目录。你不需要所有那些处理 currentRelativePath
的行。就这样写:
String curDir = "src";