2016-09-28 50 views
0

虽然看着日食别人的Maven的Java项目中,我注意到,保存的运行配置中的一种具有以下maven的命令来运行:System.out如何将输出直接输出到eclipse中的控制台?

test -Dtest=fooTest -Dcom.awesomesite=System.out 

当我检查fooTest.java文件,我发现下面的语句:

public final static String BAR = "com.awesomesite"; 
.... 
this.whereToWrite = System.getProperty(BAR); 

显然,实例变量“whereToWrite”表示输出数据应该到达的位置。由于我是Java的初学者,我只想了解System.out直接输出如何在控制台上打印。

+0

在eclipse内部的某个地方,它必须将'System.out'设置为指向控制台视图。 System.out是一个可修改的静态字段 –

+0

@LanceJava它实际上是“final”。在jvm开始后它会被反射设置,据我记忆 – SomeJavaGuy

+0

反射不是必需的(我不认为你可以通过反射来设置最终场),还有一个[setOut(...)](https ://docs.oracle.com/javase/7/docs/api/java/lang/System.html#setOut%28java.io.PrintStream%29)方法。猜测最后一个字段是一个包装,代理是可变的 –

回答

0

当启动运行配置时,Eclipse启动一个新进程以使用Runtime.getRuntime().exec(...)运行它。这将返回一个代表新过程的对象Process

Process具有getInputStream()方法,它返回连接到过程的标准输出的InputStream(这是通常System.out写入)。 Eclipse从这个输入流中读取并输出它在控制台上接收的内容。

Eclipse还使用getErrorStream()从进程错误流中读取数据。

+0

谢谢你的回答,描述了我之前不知道的引擎盖执行情况。我正在阅读eclipse配置和Runtime.getRunttime()。exec(...)。 – DaeYoung

0

System.out连接到环境/用户指定的显示。默认情况是控制台。