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