执行从 java 中的另一个程序打印 "hello world" 的程序

Execute a program that prints "hello world" from another program in java

我最初编写了名为 "Command.java" 的程序,该程序编译了另一个名为 "New.java" 的程序,该程序在执行 Command.java 之后将 hello world 打印到 console.But ,我发现它成功编译了 "New.java" 但没有在 console.Here 中打印 "Hello world" 是代码:-

class New
{
    public static void main(String[]args)
    {
        System.out.println("Hello World");
    }

}

import java.io.*;
class Command 
{
    public static void main(String[]args)throws IOException
    {


        Runtime r=Runtime.getRuntime();
        try
        {


            Process p=r.exec("cmd pushd C:\Users\Admin\Desktop");

            p=r.exec("\"E:\jdk1.7.0_11\bin\javac.exe\" New.java");
            p.waitFor();
            p=r.exec("\"E:\jdk1.7.0_11\bin\java.exe\" New"); 
            p.waitFor();

    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
    }
}

}

但在对 Command.java 进行一些更改后它起作用了.....这是新的 Command.java 代码:-

import java.io.*;
class Command 
{
    public static void main(String[]args)throws IOException
    {


        Runtime r=Runtime.getRuntime();
        try
        {


            Process p=r.exec("cmd pushd C:\Users\Admin\Desktop");

            p=r.exec("\"E:\jdk1.7.0_11\bin\javac.exe\" New.java");
            p.waitFor();
            p=r.exec("\"E:\jdk1.7.0_11\bin\java.exe\" New"); 
            p.waitFor();
            InputStream in= p.getInputStream();
            BufferedReader br=new BufferedReader(new InputStreamReader(in));
            System.out.println(br.readLine());
    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
    }
}

}

现在我的问题是,为什么我以前的 Command.java 程序没有打印 Hello world 但我的第二个版本有效。

您需要从您的 Java program.So 读取系统命令的输出,您编写的第一个程序没有向您显示 output.Your 第二个程序运行良好,因为您读取输出

每个 java 应用程序都在其自己的控制台中运行。启动程序时看到的控制台属于 Command.java。这意味着它只会显示 Command.java 的输出,而不会显示其他任何内容。 New.java 在不同的控制台中运行,在这种情况下不会向您显示。 Command.java 的第二个版本从 New.java 读取输出,然后将其打印到它自己的控制台。