gpt4 book ai didi

java - 如何在另一个java程序中编译&运行java程序?

转载 作者:行者123 更新时间:2023-11-29 09:04:32 25 4
gpt4 key购买 nike

我有一个 Main.java 和 Test.java 类,我想在 Test.java 代码中编译和运行 Main.java。这是我的代码

    Process pro1 = Runtime.getRuntime().exec("javac Main.java");
pro1.waitFor();
Process pro2 = Runtime.getRuntime().exec("java Main");

BufferedReader in = new BufferedReader(new InputStreamReader(pro2.getInputStream()));
String line = null;

while ((line = in.readLine()) != null) {
System.out.println(line);
}

我只是在 Main.java 中打印“ok”,但此代码不打印任何内容。有什么问题?

最佳答案

我修改了代码以包含一些检查:

public class Laj {

private static void printLines(String name, InputStream ins) throws Exception {
String line = null;
BufferedReader in = new BufferedReader(
new InputStreamReader(ins));
while ((line = in.readLine()) != null) {
System.out.println(name + " " + line);
}
}

private static void runProcess(String command) throws Exception {
Process pro = Runtime.getRuntime().exec(command);
printLines(command + " stdout:", pro.getInputStream());
printLines(command + " stderr:", pro.getErrorStream());
pro.waitFor();
System.out.println(command + " exitValue() " + pro.exitValue());
}

public static void main(String[] args) {
try {
runProcess("javac Main.java");
runProcess("java Main");
} catch (Exception e) {
e.printStackTrace();
}
}
}

这是 Main.java:

public class Main {
public static void main(String[] args) {
System.out.println("ok");
}
}

当一切都很好时,它就会正常工作:

alqualos@ubuntu:~/tmp$ java Laj
javac Main.java exitValue() 0
java Main stdout: ok
java Main exitValue() 0

现在,例如,如果我在 Main.java 中有一些错误:

alqualos@ubuntu:~/tmp$ java Laj
javac Main.java stderr: Main.java:3: package Systems does not exist
javac Main.java stderr: Systems.out.println("ok");
javac Main.java stderr: ^
javac Main.java stderr: 1 error
javac Main.java exitValue() 1
java Main stdout: ok
java Main exitValue() 0

它仍然打印“ok”,因为之前编译的 Main.class 仍然存在,但至少您可以看到进程运行时到底发生了什么。

关于java - 如何在另一个java程序中编译&运行java程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15766814/

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