如何将 Java ProcessBuilder 参数设置为 运行 外部 .java 文件?

How to set Java ProcessBuilder parameter to run external .java file?

我正在尝试 运行 其他 java 文件使用 ProcessBuilder class。

我想输入 java 文件的完整路径 + 文件名 + .java 并编译它。

例子,输入:C:\Windows\test.java

然后,我将输入存储到 String 变量 FILE_LOCATION 并调用 processbuilder 来编译输入 .java 文件.

这是我的代码:

 static String JAVA_FILE_LOCATION;
 static String command[] = {"javac", JAVA_FILE_LOCATION};
 ProcessBuilder processBuilder = new ProcessBuilder(command);
 Process process = processBuilder.start();
 process = new ProcessBuilder(new String[]{"java","-cp",A,B}).start();

但是我不知道怎么设置参数

process = new ProcessBuilder(new String[]{
"java","-cp",A,B}).start();

我应该如何设置那个参数(A, B)

为了回答您的确切问题,比方说,您的 class 在包 com.yourcompany.yourproduct 中,您的 class 文件在 /dir/to/your/classes/com/yourcompany/yourproduct/Yourclass.c‌​lass.

然后 A = "/dir/to/your/classes"B = "com.yourcompany.yourproduct.Yourclass".

但是,有几件事需要注意。查看您的代码:

static String JAVA_FILE_LOCATION;
static String command[] = {"javac", JAVA_FILE_LOCATION};
ProcessBuilder processBuilder = new ProcessBuilder(command);

没有。你需要CD到目录然后然后运行javac。最简单的方法是调用 processBuilder.directory(new File("/dir/to/your/classes"))。然后你需要给 javac 一个到你的源文件的相对路径 ("com/yourcompany/yourproduct/Yourclass.java").

Process process = processBuilder.start();
process = new ProcessBuilder(new String[]{"java","-cp",A,B}).start();

等到第一个进程完成编译后再尝试运行!在上面两行之间,插入 process.waitFor();。您可能还想检查是否有任何错误,如果第一个过程成功,则仅 运行 第二个过程。

顺便说一句,没有必要手动创建字符串数组。只需使用可变参数:process = new ProcessBuilder("java", "-cp", A, B).start();.