命令通过命令行工作,但在使用 ProcessBuilder 时不工作
Command Works Through Command Line, but Not When Using ProcessBuilder
我正在编写一个程序,其中包含一个功能,用户可以在其中输入 Java 代码到文本框中,并能够对其进行编译和 运行。我得到的错误是:
顶部显示的两个目录是正确的,当我从同一工作目录通过命令提示符手动执行时,该命令有效。我正在使用 Windows 10,还有代码:
public Process compile() throws IOException {
save(); //saves changes to source file
System.out.println(file.getCanonicalPath());
ProcessBuilder processBuilder = new ProcessBuilder("javac", file.getCanonicalPath());
processBuilder.directory(new File(settingsFile.getJdkPath()));
System.out.println(processBuilder.directory());
Process process = processBuilder.start(); //Throws exception
this.compiledFile = new File(file.getParentFile(), file.getName().replace(".java", ".class"));
return process;
}
要编译的文件:
工作目录:
使用这段代码,我能够在桌面上将 Test.java 文件编译成 Test.class 文件。
import java.io.IOException;
public class App {
public static Process compile() throws IOException {
String myFilePath = "C:\Users\redacted\Desktop\Test.java";
String javacPath = "C:\Program Files\Java\jdk1.8.0_171\bin\javac.exe";
ProcessBuilder processBuilder = new ProcessBuilder(javacPath, myFilePath);
return processBuilder.start();
}
public static void main(String[] args) throws IOException {
Process process = compile();
}
}
使用 String javacPath = "javac.exe";
也有效,但这可能是因为我的 JDK bin 在我的 PATH 变量上。
您在 ProcessBuilder 构造函数调用中的路径或权限有问题。
我正在编写一个程序,其中包含一个功能,用户可以在其中输入 Java 代码到文本框中,并能够对其进行编译和 运行。我得到的错误是:
顶部显示的两个目录是正确的,当我从同一工作目录通过命令提示符手动执行时,该命令有效。我正在使用 Windows 10,还有代码:
public Process compile() throws IOException {
save(); //saves changes to source file
System.out.println(file.getCanonicalPath());
ProcessBuilder processBuilder = new ProcessBuilder("javac", file.getCanonicalPath());
processBuilder.directory(new File(settingsFile.getJdkPath()));
System.out.println(processBuilder.directory());
Process process = processBuilder.start(); //Throws exception
this.compiledFile = new File(file.getParentFile(), file.getName().replace(".java", ".class"));
return process;
}
要编译的文件:
工作目录:
使用这段代码,我能够在桌面上将 Test.java 文件编译成 Test.class 文件。
import java.io.IOException;
public class App {
public static Process compile() throws IOException {
String myFilePath = "C:\Users\redacted\Desktop\Test.java";
String javacPath = "C:\Program Files\Java\jdk1.8.0_171\bin\javac.exe";
ProcessBuilder processBuilder = new ProcessBuilder(javacPath, myFilePath);
return processBuilder.start();
}
public static void main(String[] args) throws IOException {
Process process = compile();
}
}
使用 String javacPath = "javac.exe";
也有效,但这可能是因为我的 JDK bin 在我的 PATH 变量上。
您在 ProcessBuilder 构造函数调用中的路径或权限有问题。