mik*_*ent 1 inputstream system.in blocking gradle
这个问题解释了如何System.in在运行任务时使用来运行项目中的特定类。
但对我来说,目前它不起作用:尽管我已将application插件和以下几行包含在build.gradle:
mainClassName = "misc.StreamsExp"
run{
standardInput = System.in
}
task stream( type: JavaExec, dependsOn: assemble ){
classpath sourceSets.main.runtimeClasspath
main = "misc.StreamsExp"
}
Run Code Online (Sandbox Code Playgroud)
下面的应用程序代码中的行readLine应该是阻塞的,但事实并非如此:
BufferedReader br = new BufferedReader(new InputStreamReader( System.in ));
String enteredLine = "";
while( enteredLine == null || ! enteredLine.equals( "q" )){
System.out.println( "spuds");
enteredLine = br.readLine();
}
Run Code Online (Sandbox Code Playgroud)
...相反,事情会永远旋转:
土豆土豆
土豆
土豆
...
注意,我使用的是 Windows 10 操作系统,带有 Java 8.91。我尝试过 Windows DOS 控制台和 Cygwin。
NB2 当我在 Eclipse(Gradle STS Eclipse 插件)内运行此任务时,会发生同样的事情stream......但当我这样做时不会发生Run as --> Java application:然后阻塞会按预期发生。
哈...其中一个你认为你会永远被难住的地方,你在发布到 SO 后 2 分钟就找到了解决方案!我会把它留在这里给其他人...
答案是将行放入standardInput =您正在运行的任务中,如下所示:
task stream( type: JavaExec, dependsOn: assemble ){
standardInput = System.in
classpath sourceSets.main.runtimeClasspath
main = "misc.StreamsExp"
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,在 Windows DOS 终端中,提示符“spuds”后面跟着的是
> 建筑 88% > :stream
...这是我提到的问题中提到的一个已知的“错误”。在 Cygwin 中,这个错误不会发生。
注意:这适用于 Windows DOS 终端和 Cygwin 终端...它不能解决在streamEclipse 中运行定制任务时的问题!
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |