执行一个程序来打印;“你好,世界”;来自java中的另一个程序
我最初编写了名为“Command.java”的程序,该程序编译了另一个名为“New.java”的程序,该程序将hello world打印到控制台。但在执行Command.java后,我发现它成功编译了“New.java”,但没有在控制台中打印“hello world”。下面是代码:-执行一个程序来打印;“你好,世界”;来自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");
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());
}
}