关于运行时:执行从java中的另一个程序打印“hello world”的程序

Execute a program that prints “hello world” from another program in java

我最初编写了一个名为"命令.java"的程序,编译了另一个名为"NeX.java"的程序,它将Hello World打印到控制台。但是在执行命令Java.java之后,我发现它成功地编译了"NeX.java",但没有在控制台上打印"Hello World"。下面是代码:

1
2
3
4
5
6
class New
{
    public static void main(String[]args)
    {
        System.out.println("Hello World");
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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应用程序都在自己的控制台中运行。启动程序时看到的控制台属于command.java。这意味着它只显示command.java的输出,而不显示其他内容。new.java在不同的控制台中运行,在本例中不会显示给您。第二个版本的command.java从new.java读取输出,然后将其打印到自己的控制台。


你需要从Java程序中读取系统命令的输出。因此,你编写的第一个程序没有显示输出。