Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
执行一个程序来打印;“你好,世界”;来自java中的另一个程序_Java_Runtime_Processbuilder - Fatal编程技术网

执行一个程序来打印;“你好,世界”;来自java中的另一个程序

执行一个程序来打印;“你好,世界”;来自java中的另一个程序,java,runtime,processbuilder,Java,Runtime,Processbuilder,我最初编写了名为“Command.java”的程序,该程序编译了另一个名为“New.java”的程序,该程序将hello world打印到控制台。但在执行Command.java后,我发现它成功编译了“New.java”,但没有在控制台中打印“hello world”。下面是代码:- class New { public static void main(String[]args) { System.out.println("Hello World");

我最初编写了名为“Command.java”的程序,该程序编译了另一个名为“New.java”的程序,该程序将hello world打印到控制台。但在执行Command.java后,我发现它成功编译了“New.java”,但没有在控制台中打印“hello world”。下面是代码:-

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

}

但是在对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程序读取系统命令的输出。因此,您编写的第一个程序没有显示输出。您的第二个程序运行良好,因为您读取了输出,每个java应用程序都在自己的控制台中运行。启动程序时看到的控制台属于Command.java。这意味着它将只显示Command.java的输出,而不显示其他内容。java在不同的控制台中运行,在本例中,该控制台不会显示给您。Command.java的第二个版本读取New.java的输出,然后将其打印到自己的控制台。

但是New.java包含System.out.println()语句,因此它应该直接将“Hello world”打印到控制台窗口,即命令提示符窗口默认情况下,创建的子流程没有自己的终端或控制台。它的所有标准I/O(即stdin、stdout、stderr)操作都将重定向到父进程,在父进程中,可以通过使用getOutputStream()、getInputStream()和getErrorStream()方法获得的流来访问它们。参考
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());
    }
}