我最初编写了一个名为"命令.java"的程序,编译了另一个名为"NeX.java"的程序,它将Hello World打印到控制台。但是在执行命令Java.java之后,我发现它成功地编译了"NeX.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,但我的第二个版本工作正常。
每个Java应用程序都在自己的控制台中运行。启动程序时看到的控制台属于command.java。这意味着它只显示command.java的输出,而不显示其他内容。new.java在不同的控制台中运行,在本例中不会显示给您。第二个版本的command.java从new.java读取输出,然后将其打印到自己的控制台。
你需要从Java程序中读取系统命令的输出。因此,你编写的第一个程序没有显示输出。
但是new.java包含system.out.println()语句,因此它应该直接将"hello world"打印到控制台窗口,即命令提示窗口。
默认情况下,创建的子进程没有自己的终端或控制台。它的所有标准I/O(即stdin、stdout、stderr)操作都将重定向到父进程,在父进程中,可以通过使用getOutputstream()、getInputstream()和getErrorstream()方法获取的流访问这些操作。参考链接