首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy: JLine不等待输入级

Groovy: JLine不等待输入级
EN

Stack Overflow用户
提问于 2018-04-16 18:34:08
回答 1查看 453关注 0票数 0

操作系统: Windows 10,主要使用Cygwin。

我整理了一个DummyMain.groovy文件,如下所示:

代码语言:javascript
复制
@Grab(group='org.jline', module='jline', version='3.7.0')
class DummyMain {

static void main( args ) {
    new DummyMain().go()
}

def go() {
    def terminal = org.jline.terminal.TerminalBuilder.builder().jna( true ).system( true ).build()
    terminal.enterRawMode()
    def reader = terminal.reader()
    int readInt = -1
    while( readInt != 13 ) {
        readInt = reader.read()
        println "read |$readInt| class ${readInt.class.simpleName}"
        println "reader class ${reader.class.simpleName}"
    }
    reader.close()
    terminal.close()
}

}

当我在自己的目录中运行groovy DummyMain时,它可以正常工作,并以joy填充我:reader.read()行为下一个字符暂停,然后处理它(即在用户按Enter键结束行之前)。

但是当我注释掉@Grab并将这一行放在build.gradle中时

代码语言:javascript
复制
compile 'org.jline:jline:3.7.0'

并尝试使用最简单的build.gradle运行该文件--它失败了:while循环无休止地旋转,而不等待用户输入,即无休止地打印“Readx-1-1.”。

如果我使用Cygwin控制台或Windows控制台转到gradle run,则会发生此等待失败。

从另一个打印行中,我可以看出这里的读取器在所有3种情况下都是类NonBlockingInputStreamReader (即Gradle通过Cygwin,Gradle通过Windoze或groovy命令行命令)。

但是,我发现如果我做了一个gradle installDist,得到的应用程序的“分布式”版本可以正常工作:响应输入的每个字符并等待下一个字符。谢天谢地!但是为了测试和开发目的,如果能够找到解决尝试使用Gradle的问题的解决方案,那就太好了。似乎有些测试可能会失败,而它们不应该因此而失败。

回复tkruse

这是build.gradle。DummyMain.groovy位于src\main\groovy\core下面。

代码语言:javascript
复制
apply plugin: 'java-library'
apply plugin: 'groovy'
apply plugin: 'application'

mainClassName = "core.DummyMain"

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    api 'org.apache.commons:commons-math3:3.6.1'
    implementation 'com.google.guava:guava:21.0'
    compile 'org.codehaus.groovy:groovy-all:2.6.0-alpha-2'
    compile 'net.bytebuddy:byte-buddy:1.6.11'
    compile 'org.jline:jline:3.7.0'
}

唯一答案的答案(到目前为止)是JLine的作者。我认为格拉德尔不太可能使用JLine,如果是这样的话,纪尧姆·诺德会提到.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-16 20:50:50

我想您注意到,在一种情况下,您指的是jline-terminal-jna,而在另一种情况下,您指的是jline。虽然jline jar包含jline-terminal-jna jar内容,但依赖项略有不同,因为JNA库是jline-terminal-jna的强制依赖项,但是jline的可选依赖项。

您应该检查由Terminal创建的JLine实例的类,并验证这是预期的JnaWinSysTerminal类。

这也可能与不久前提出的JLine问题https://github.com/jline/jline3/issues/77有关。但是,在JLine中没有什么可修复的,相关的gradle问题被拒绝并关闭(参见https://github.com/gradle/gradle/issues/1099)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49864080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档