Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置Java ProcessBuilder参数以运行外部.Java文件?_Java_Processbuilder - Fatal编程技术网

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

如何设置Java ProcessBuilder参数以运行外部.Java文件?,java,processbuilder,Java,Processbuilder,我正在尝试使用ProcessBuilder类运行其他java文件 我想获得java文件+文件名+.java的整个路径的输入并编译它 示例,输入:C:\Windows\test.java 然后,我将输入存储到字符串变量文件_LOCATION中,并调用processbuilder编译input.java文件 这是我的密码: static String JAVA_FILE_LOCATION; static String command[] = {"javac", JAVA_FILE_LOCATIO

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

我想获得java文件+文件名+.java的整个路径的输入并编译它

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

然后,我将输入存储到字符串变量文件_LOCATION中,并调用processbuilder编译input.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

要回答您的确切问题,例如,您的类位于com.yourcompany.yourproduct包中,而您的类文件位于/dir/To/your/classes/com/yourcompany/yourcompany/yourcompany/Yourclass.c包中‌​姑娘

然后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.directorynew文件/dir/to/your/classes。然后,您需要为javac提供一个到源文件com/yourcompany/yourproduct/Yourclass.java的相对路径

等待第一个进程完成编译,然后再尝试运行它!在上面两行之间插入process.waitFor;。您可能还希望检查是否有任何错误,并且仅在第一个进程成功时才运行第二个进程


顺便说一句,不需要长时间创建字符串数组。只需使用varargs:process=newprocessbuilderjava,-cp,A,B.start

您可以使用javax.tools.ToolProvider.getSystemJavaCompiler调用java编译器,而不必依赖于运行外部进程。我非常感谢您的帮助。
Process process = processBuilder.start();
process = new ProcessBuilder(new String[]{"java","-cp",A,B}).start();