Java 为什么在执行bufferedReader.readLine()时返回空值;在windows cmd和powershell中?

Java 为什么在执行bufferedReader.readLine()时返回空值;在windows cmd和powershell中?,java,powershell,intellij-idea,cmd,Java,Powershell,Intellij Idea,Cmd,我试图让我的团队在我们的linux机器上使用的java命令行工具也在我们的windows机器上运行,但是当程序提示输入时,bufferedReader.readLine()返回一个空值而不提示 在linux中以及在我的IntelliJ控制台中运行时,下面的运行与我预期的一样,但不是在cmd或powershell中运行 正在使用以下bat脚本中的gradlew运行/构建的类: @rem @rem run test @rem echo off set LIB=atlib set CP=%LIB%/

我试图让我的团队在我们的
linux
机器上使用的java命令行工具也在我们的windows机器上运行,但是当程序提示输入时,
bufferedReader.readLine()
返回一个空值而不提示

linux
中以及在我的IntelliJ控制台中运行时,下面的运行与我预期的一样,但不是在cmd或powershell中运行

正在使用以下bat脚本中的gradlew运行/构建的类:

@rem
@rem run test
@rem
echo off

set LIB=atlib
set CP=%LIB%/*;%LIB%

.\gradlew.bat runCliTest
梯度任务:

task runCliTest(type:JavaExec) {
def argList = []
main = "com.example.CliTest"
args = argList
println(argList)
workingDir = rootDir
classpath = sourceSets.main.runtimeClasspath
}
这就是我希望看到的:

Hello World
enter text: 1
input: 1
这就是我得到的:

Hello World
enter text: input: null

根据您描述的行为,很明显在“cmd”和“powershell”情况下,“标准输入”流位于流的末尾位置。因此,当调用
readLine()
时,会得到一个
null

这并不奇怪(对我来说)构建工具通常不接受标准输入。但这也可能与你管理gradle的方式有关

根据我在这里的发现:

。。。看起来您应该使用
System.console()
来获取
console
对象,然后使用其方法与用户交互。如果无法与用户直接交互,则需要允许
console()
方法返回
null

Hello World
enter text: input: null