如何将 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.class.
然后 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();
.
我正在尝试 运行 其他 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.class.
然后 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();
.