为什么System.console()设置如果用java执行而未设置如果通过ant执行?

时间:2009-07-29 12:42:29

标签: java ant console

我在Java中编写了一个小命令行应用程序,并希望使用新类java.io.Console。我使用System.console()来获取此类的实例。如果我通过'java -jar MyApp.jar'调用我的应用程序,则此调用返回一个工作控制台,但如果我通过ant的java-task执行应用程序,则调用未设置。对于此调用,fork为true且spwan为false。为什么这个区别(System.out.print()在ant下工作正常)?如果我通过ant启动我的应用程序,如何使用控制台?

4 个答案:

答案 0 :(得分:7)

this method州的Javadoc:

  

返回与当前Java虚拟机关联的唯一Console对象(如果有)。

System.Console类状态的文档:

  

虚拟机是否具有控制台取决于底层平台以及虚拟机的调用方式。如果从交互式命令行启动虚拟机而不重定向标准输入和输出流,则其控制台将存在,并且通常将连接到启动虚拟机的键盘和显示器。如果虚拟机是自动启动的,例如后台作业调度程序,那么它通常没有控制台。

我想,当Ant分叉一个新的Java进程时,它会重定向标准输出。

答案 1 :(得分:2)

如果重定向输入或输出,System.console()将返回 null 。 Ant就是这么做的。

答案 2 :(得分:1)

嗯,ant是一个构建自动化工具。通常,交互式应用程序在构建自动化中几乎没有任何地方,因此在通过ant运行任务时,您将无法获得控制台,这并非完全出乎意料。

答案 3 :(得分:0)

看起来ant java任务使用javaw.exe而不是java.exe。 javaw没有连接控制台。