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

时间:2017-11-24 15:05:20

标签: java processbuilder

我尝试使用ProcessBuilder类运行其他java文件。

我想输入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)

1 个答案:

答案 0 :(得分:1)

要回答您的确切问题,比方说,您的班级位于com.yourcompany.yourproduct个包中,而您的班级文件位于/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();。您可能还想检查是否存在任何错误,只有在第一个过程成功时才运行第二个过程。

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