我在Java中编写了一个小命令行应用程序,并希望使用新类java.io.Console.我使用System.console()来获取此类的实例.如果我通过'java -jar MyApp.jar'调用我的应用程序,则此调用返回一个工作控制台,但如果我通过ant的java-task执行应用程序,则调用未设置.对于此调用,fork为true且spwan为false.为什么这个区别(System.out.print()在ant下工作正常)?如果我通过ant启动我的应用程序,如何使用控制台?
此方法的Javadoc 指出:
返回与当前Java虚拟机关联的唯一Console对象(如果有).
而System.Console班级的文档说明:
虚拟机是否具有控制台取决于底层平台以及虚拟机的调用方式.如果从交互式命令行启动虚拟机而不重定向标准输入和输出流,则其控制台将存在,并且通常将连接到启动虚拟机的键盘和显示器.如果虚拟机是自动启动的,例如后台作业调度程序,则通常没有控制台.
我想,当Ant分叉一个新的Java进程时,它会重定向标准输出.