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

时间:2015-09-28 07:57:31

标签: java runtime processbuilder

我最初编写了名为" Command.java"编译另一个名为" New.java"然后将hello world打印到控制台。但是在执行Command.java之后,我发现它成功编译了#34; New.java"但没有打印" 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但我的第二个版本有效。

2 个答案:

答案 0 :(得分:0)

你需要从Java程序中读取系统命令的输出。所以,你编写的第一个程序没有向你显示输出。你读取输出后你的第二个程序工作正常

答案 1 :(得分:0)

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