Can';我不能让Gradle使用System.in
说明如何在运行任务时使用Can';我不能让Gradle使用System.in,gradle,inputstream,blocking,system.in,Gradle,Inputstream,Blocking,System.in,说明如何在运行任务时使用System.in在项目中运行特定类 但对我来说,它目前不起作用:尽管我在build.gradle中包含了应用程序插件和以下几行内容: mainClassName = "misc.StreamsExp" run{ standardInput = System.in } task stream( type: JavaExec, dependsOn: assemble ){ classpath sourceSets.main.runtimeClasspat
System.in
在项目中运行特定类
但对我来说,它目前不起作用:尽管我在build.gradle
中包含了应用程序
插件和以下几行内容:
mainClassName = "misc.StreamsExp"
run{
standardInput = System.in
}
task stream( type: JavaExec, dependsOn: assemble ){
classpath sourceSets.main.runtimeClasspath
main = "misc.StreamsExp"
}
下面应用程序代码中带有readLine
的行应该被阻塞,但不是:
BufferedReader br = new BufferedReader(new InputStreamReader( System.in ));
String enteredLine = "";
while( enteredLine == null || ! enteredLine.equals( "q" )){
System.out.println( "spuds");
enteredLine = br.readLine();
}
。。。取而代之的是,这东西永远旋转:
马铃薯马铃薯
马铃薯
注意:我使用的是Windows10操作系统,Java 8.91。我试过Windows DOS控制台和Cygwin。
NB2当我在Eclipse(Gradle STS Eclipse插件)中运行这个
流
任务时,也会发生同样的事情。。。但是当我以-->Java应用程序的身份运行时就不会了:那么阻塞就会如预期的那样发生。哈。。。其中一个你认为你将永远被难倒的地方,你在发布到SO后2分钟就找到了解决方案!我会把它留给其他人
答案是将行standardInput=
放在您正在运行的任务中,如下所示:
task stream( type: JavaExec, dependsOn: assemble ){
standardInput = System.in
classpath sourceSets.main.runtimeClasspath
main = "misc.StreamsExp"
}
奇怪的是,在Windows DOS终端中,提示“spuds”之后是
>建筑88%>:流。。。这是我提到的问题中提到的一个已知的“bug”。在Cygwin中,此错误不会发生
警告:这适用于Windows DOS终端和Cygwin终端。。。在Eclipse中运行定制的
流
任务时,它不会解决问题 对。。。正如我所说,在我的例子中,它在EclipseIDE中不起作用。它似乎只在CLI终端中工作。