从cmd获取输出java complie

从cmd获取输出java complie,java,Java,我有一个项目,使用命令提示符编译java文件,然后在控制台中打印结果,这是mycode public static void main(String[] args) { String line; String output = ""; try { Process p = Runtime.getRuntime().exec("java helloworld"); BufferedReader input = new BufferedR

我有一个项目,使用命令提示符编译java文件,然后在控制台中打印结果,这是mycode

public static void main(String[] args) {
        String line;
    String output = "";
    try {
        Process p = Runtime.getRuntime().exec("java helloworld");
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = input.readLine()) != null) {
            output += (line + '\n');
        }            
        input.close();           
        }
    catch (Exception ex) {
        ex.printStackTrace();
    }
    System.out.print(output);
    }

但是它没有显示任何内容,尽管它与另一个命令一起工作,请帮助我。

正如一位评论员提到的,这可能会导致您遇到相当复杂的设置。在您的例子中,最有可能的情况是java中发生了一个错误,您只是看不到输出,因为错误消息被写入到STDERR流而不是STDOUT

因此,有两个选项(1)您获取已有的代码,并尝试从进程的错误流中读取

Bufferedreader error = new BufferedReader(new InputStreamReader(p.getErrorStream());
或者,如果您不关心所启动的进程是否正在写入STDERR或STDOUT,那么您也可以使用ProcessBuilder并将其设置为重定向错误流

ProcessBuilder pb = new ProcessBuilder("java", "helloworld");
pb.redirectErrorStream(true); // this redirects STDERR to STDOUT
Process p = pb.start();
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
    output += (line + '\n');
}            
input.close();    

为了简单起见,我省略了上面的所有样板代码和异常处理。但是我想你会明白的。

为什么要使用Process builder并执行相同的操作。为什么不使用接口呢。请参阅文档,它写得非常好。

如何?您需要同时读取两个输出流。请阅读
Runtime.exec
的正确用法。它是新的,有点过时,有更好的线程API可用-但它让你尝到了你尝试做什么的复杂性。谢谢你,我的新知识是的,我尝试了选项1,我得到了一个以前没有显示过的错误。它是show“error:无法找到或加载主类helloworld”,但我可以直接指挥prompt@john现在这是一个类路径问题,发布一个新问题。我的命令提示符将默认路径设置为C:\Users\john,我将我的类文件放在其中,我认为当我使用“Runtime.getRuntime().exec(“java helloworld”);”时,它会使用该路径,但正如Boris所提到的,这是一个类路径的问题,即您添加到ProcessBuilder的参数的问题。例如,请参见以下问题。