gpt4 book ai didi

java - 从另一个 Java 程序编译并运行一个 Java 程序

转载 作者:行者123 更新时间:2023-12-02 13:16:18 27 4
gpt4 key购买 nike

我正在编写一个程序,它使用 main 方法获取输入“.java”文件的路径。然后程序应该编译该文件并运行它。

假设我尝试编译和运行的程序如下所示:

Main.java

public class Main {

public static void main(String[] args) {
System.out.println("Hello, world!");
}
}

执行编译并尝试运行它的程序:

Evaluator.java

    /**
* Matches any .java file.
*/
private static final PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:**.java");

private static String path;

/**
* Program entry point. Obtains the path to the .java file as a command line argument.
*
* @param args One argument from the command line: path to the .java file.
* @throws Exception
*/
public static void main(String[] args) throws Exception {
if (args.length != 1) {
throw new IllegalArgumentException(
"Expected exactly one argument from the command line.");
}

if (!matcher.matches(Paths.get(args[0]))) {
throw new IllegalArgumentException(
String.format("File %s is not a valid java file.", args[0]));
}

// path is in a valid format
path = args[0];

// compile a program
compile();

// run a program
run();
}

/**
* Compiles a program.
*
* @throws Exception
*/
private static void compile() throws Exception {
System.out.println("Compiling the program ...");

Process p = Runtime.getRuntime().exec("javac " + path);
output("Std.In", p.getInputStream());
output("Std.Out", p.getErrorStream());
p.waitFor();

System.out.println("Program successfully compiled!\n");
}

/**
* Runs a program.
*
* @throws Exception
*/
private static void run() throws Exception {
System.out.println("Executing the program ...");

Process p = Runtime.getRuntime().exec("java " + getProgramName(path));
output("Std.In", p.getInputStream());
output("Std.Out", p.getErrorStream());
p.waitFor();

System.out.println("Program finished!");
}

private static void output(String stream, InputStream in) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in, CS));

for (String line = reader.readLine(); line != null; line = reader.readLine()) {
System.out.println(String.format("%s: %s", stream, line));
}
}

private static String getProgramName(String path) {
return path.replace(".java", "");
}
}

我的“Main.java”文件位于项目根目录中。我正在使用命令行参数“./Main.java”运行该程序。这样做可以正确编译程序并生成一个新文件“Main.class”。但是,run 方法输出如下:

Std.Out:错误:无法找到或加载主类..Main

这里应该出现什么问题?

最佳答案

尝试将您要启动的java进程设置为正确的工作目录,然后设置相关的类路径。

这应该有帮助。

更新

我建议使用方法Runtime.getRuntime().exec(String command, String[] envp, File dir)

最后一个参数dir是进程工作目录。

关于java - 从另一个 Java 程序编译并运行一个 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43757329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com