我尝试使用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)
?
答案 0 :(得分:1)
要回答您的确切问题,比方说,您的班级位于com.yourcompany.yourproduct
个包中,而您的班级文件位于/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();
。您可能还想检查是否存在任何错误,只有在第一个过程成功时才运行第二个过程。
顺便说一句,没有必要长期创建字符串数组。只需使用varargs:process = new ProcessBuilder("java", "-cp", A, B).start();
。