Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

picocli-shell throws StackOverflowError #1310

Closed
vicasong opened this issue Jan 20, 2021 · 7 comments
Closed

picocli-shell throws StackOverflowError #1310

vicasong opened this issue Jan 20, 2021 · 7 comments
Labels
theme: integration An issue or change related to integration with other frameworks, shells or operating systems theme: shell An issue or change related to interactive (JLine) applications type: dependency 📚

Comments

@vicasong
Copy link

Environment

  • picocli-shell-jline3:4.6.1
  • spring-boot:2.2.1.RELEASE
  • picocli-spring-boot-starter:4.6.1

How

I am using shell in a spring-boot project, I completely copied the sample code to run the demo program, but the program throws an exception when I enter any command.

> Task :gui-cli:PicocliShellApplicationRunner.main()
prompt> Jan 20, 2021 4:58:41 PM org.jline.utils.Log logr
WARN: Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)
?
s
Unknown command: s
java.lang.StackOverflowError
	at org.jline.utils.AttributedStringBuilder.subSequence(AttributedStringBuilder.java:84)
	at org.jline.utils.AttributedCharSequence.substring(AttributedCharSequence.java:251)
	at org.jline.utils.AttributedCharSequence.toAttributedString(AttributedCharSequence.java:356)
	at org.jline.reader.impl.DefaultHighlighter.highlight(DefaultHighlighter.java:105)
	at org.jline.reader.impl.LineReaderImpl.getHighlightedBuffer(LineReaderImpl.java:4061)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4001)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
<... etc..>

Explain

At first, I used SpringApplicationRunner to start the shell. In the example, it seems that only one top-level class can describe the commands. So I used javaassist to generate this top-level class with Bean scanning. Everything is fine, but the shell cannot run normally, and then I completely copied the sample code into the main method, but it still does not work.

@remkop
Copy link
Owner

remkop commented Jan 20, 2021

This warning is a sign that there may be missing dependencies:

WARN: Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)

Only the picocli-shell-jline3:4.6.1 dependency may not be enough.
Can you also add the following and see if that makes a difference?

  • org.jline:jline:3.17.1
  • org.jline:jline-console:3.17.1
  • and maybe org.fusesource.jansi:jansi:2.1.0

@vicasong
Copy link
Author

This still doesn't work.

dependencies {
    compile 'info.picocli:picocli-shell-jline3:4.6.1'
    compile 'org.jline:jline:3.17.1'
    compile 'org.jline:jline-console:3.17.1'
    compile 'org.fusesource.jansi:jansi:2.1.0'
    compile "info.picocli:picocli-spring-boot-starter:4.6.1"

    // implementation 'org.springframework.shell:spring-shell-starter:2.0.0.RELEASE'
    // console progress
    // compile 'me.tongfei:progressbar:0.9.0'
    // compile group: 'org.javassist', name: 'javassist', version: '3.27.0-GA'
}
  • Error
Invalid command: ?
java.lang.StackOverflowError
	at org.jline.utils.AttributedCharSequence.columnSplitLength(AttributedCharSequence.java:332)
	at org.jline.utils.AttributedCharSequence.columnSplitLength(AttributedCharSequence.java:324)
	at org.jline.reader.impl.LineReaderImpl.insertSecondaryPrompts(LineReaderImpl.java:4179)
	at org.jline.reader.impl.LineReaderImpl.insertSecondaryPrompts(LineReaderImpl.java:4174)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4003)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
<... etc....>

@remkop
Copy link
Owner

remkop commented Jan 21, 2021

Ok, I will try to reproduce this.
From the stacktrace, it may be a problem in JLine3...
Maybe we should also raise a ticket in the JLine3 project.

@vicasong
Copy link
Author

This is my command line, I tried different JDK

  • JDK13
"D:\Program Files\Java\jdk13.0.1\bin\java.exe" "-javaagent:E:\Program Files\JetBrains\IntelliJ IDEA 2020.2\lib\idea_rt.jar=58511:E:\Program Files\JetBrains\IntelliJ IDEA 2020.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\vicasong\IdeaProjects\picocli-demo\build\classes\java\main;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\info.picocli\picocli-shell-jline3\4.6.1\5357b9ee5e01eda2188d430570fafb94691b91b4\picocli-shell-jline3-4.6.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline\3.17.1\54601bfb5913312aab02e4d8d3efa6cd70d754e0\jline-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline-console\3.17.1\8505dfbf8629c4b3fa359a813889cc962247b7e5\jline-console-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.fusesource.jansi\jansi\2.1.0\605acb1326439709ac32b1bdf7c2606b9ba7fc35\jansi-2.1.0.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\info.picocli\picocli-spring-boot-starter\4.6.1\18386bbdce6c0a192a0a5c6f95df22c507ff0d26\picocli-spring-boot-starter-4.6.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\info.picocli\picocli\4.6.1\49a67ee4b4d9722fa60f3f9ffaffa72861c32966\picocli-4.6.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline-builtins\3.17.1\676fa909405a37e5bc71766fdfe74735573f1aa1\jline-builtins-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline-style\3.17.1\4552a6b37ea93d21cf6ac206d8c94b73232a2d44\jline-style-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\2.4.1\15d81ffe81e26de37986d491e1cf4c1e3a324ca3\spring-boot-starter-2.4.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline-reader\3.17.1\a2e550830d4618c6cf5ac55ccef865dd08f8aa3c\jline-reader-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline-terminal\3.17.1\8a04f24ae32fe780bc68c701379106375d7fcc6f\jline-terminal-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\2.4.1\9af62d8d15ee71efb9baf35dc5263fc953230ab1\spring-boot-autoconfigure-2.4.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\2.4.1\92bf6245c590b56ecb10d8d39ffe04ab0cdfee9\spring-boot-2.4.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\2.4.1\5e83cd807e8fe6a25dd36a37ad9222e9d1309336\spring-boot-starter-logging-2.4.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\1.3.5\59eb84ee0d616332ff44aba065f3888cf002cd2d\jakarta.annotation-api-1.3.5.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\5.3.2\152489ed8223a6ad19065a3cd1ee6b9e20c0b82f\spring-core-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\1.27\359d62567480b07a679dc643f82fc926b100eed5\snakeyaml-1.27.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\5.3.2\83ff3909a582eceb5c8ae152f1e510672106f42b\spring-context-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.2.3\7c4f3c474fb2c041d8028740440937705ebb473a\logback-classic-1.2.3.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.13.3\966f6fd1af4959d6b12bfa880121d4a2b164f857\log4j-to-slf4j-2.13.3.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\1.7.30\d58bebff8cbf70ff52b59208586095f467656c30\jul-to-slf4j-1.7.30.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\5.3.2\5a9fc63ea825fe0de40cefd6d4985490ceabefbb\spring-jcl-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\5.3.2\c01aecb495a37786b5d6b7e9701c6f78353b61e6\spring-aop-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\5.3.2\289d8047f7cc524d60ca0c4cc6fedb8cb003e02d\spring-beans-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\5.3.2\31cfebc4f74de54ddf4298cc6fa4de4090486c41\spring-expression-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.2.3\864344400c3d4d92dfeb0a305dc87d953677c03c\logback-core-1.2.3.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\1.7.30\b5a4b6d16ab13e34a88fae84c35cd5d68cac922c\slf4j-api-1.7.30.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.13.3\ec1508160b93d274b1add34419b897bae84c6ca9\log4j-api-2.13.3.jar org.example.Example
prompt> ?
Invalid command: ?
java.lang.StackOverflowError
	at java.base/java.util.Comparator$$Lambda$283/0x0000000800c29c40.<init>(Unknown Source)
	at java.base/java.util.Comparator$$Lambda$283/0x0000000800c29c40.get$Lambda(Unknown Source)
	at java.base/java.util.Comparator.comparing(Comparator.java:435)
	at java.base/java.util.Comparator.thenComparing(Comparator.java:242)
	at org.jline.reader.impl.LineReaderImpl.getGroupComparator(LineReaderImpl.java:4664)
	at org.jline.reader.impl.LineReaderImpl.computePost(LineReaderImpl.java:5134)
	at org.jline.reader.impl.LineReaderImpl.computePost(LineReaderImpl.java:5128)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5011)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
<...etc.>
  • JDK8
"D:\Program Files\Java\jdk1.8.0_261\bin\java.exe" "-javaagent:E:\Program Files\JetBrains\IntelliJ IDEA 2020.2\lib\idea_rt.jar=58511:E:\Program Files\JetBrains\IntelliJ IDEA 2020.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\vicasong\IdeaProjects\picocli-demo\build\classes\java\main;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\info.picocli\picocli-shell-jline3\4.6.1\5357b9ee5e01eda2188d430570fafb94691b91b4\picocli-shell-jline3-4.6.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline\3.17.1\54601bfb5913312aab02e4d8d3efa6cd70d754e0\jline-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline-console\3.17.1\8505dfbf8629c4b3fa359a813889cc962247b7e5\jline-console-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.fusesource.jansi\jansi\2.1.0\605acb1326439709ac32b1bdf7c2606b9ba7fc35\jansi-2.1.0.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\info.picocli\picocli-spring-boot-starter\4.6.1\18386bbdce6c0a192a0a5c6f95df22c507ff0d26\picocli-spring-boot-starter-4.6.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\info.picocli\picocli\4.6.1\49a67ee4b4d9722fa60f3f9ffaffa72861c32966\picocli-4.6.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline-builtins\3.17.1\676fa909405a37e5bc71766fdfe74735573f1aa1\jline-builtins-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline-style\3.17.1\4552a6b37ea93d21cf6ac206d8c94b73232a2d44\jline-style-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\2.4.1\15d81ffe81e26de37986d491e1cf4c1e3a324ca3\spring-boot-starter-2.4.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline-reader\3.17.1\a2e550830d4618c6cf5ac55ccef865dd08f8aa3c\jline-reader-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.jline\jline-terminal\3.17.1\8a04f24ae32fe780bc68c701379106375d7fcc6f\jline-terminal-3.17.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\2.4.1\9af62d8d15ee71efb9baf35dc5263fc953230ab1\spring-boot-autoconfigure-2.4.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\2.4.1\92bf6245c590b56ecb10d8d39ffe04ab0cdfee9\spring-boot-2.4.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\2.4.1\5e83cd807e8fe6a25dd36a37ad9222e9d1309336\spring-boot-starter-logging-2.4.1.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\1.3.5\59eb84ee0d616332ff44aba065f3888cf002cd2d\jakarta.annotation-api-1.3.5.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\5.3.2\152489ed8223a6ad19065a3cd1ee6b9e20c0b82f\spring-core-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\1.27\359d62567480b07a679dc643f82fc926b100eed5\snakeyaml-1.27.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\5.3.2\83ff3909a582eceb5c8ae152f1e510672106f42b\spring-context-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.2.3\7c4f3c474fb2c041d8028740440937705ebb473a\logback-classic-1.2.3.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.13.3\966f6fd1af4959d6b12bfa880121d4a2b164f857\log4j-to-slf4j-2.13.3.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\1.7.30\d58bebff8cbf70ff52b59208586095f467656c30\jul-to-slf4j-1.7.30.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\5.3.2\5a9fc63ea825fe0de40cefd6d4985490ceabefbb\spring-jcl-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\5.3.2\c01aecb495a37786b5d6b7e9701c6f78353b61e6\spring-aop-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\5.3.2\289d8047f7cc524d60ca0c4cc6fedb8cb003e02d\spring-beans-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\5.3.2\31cfebc4f74de54ddf4298cc6fa4de4090486c41\spring-expression-5.3.2.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.2.3\864344400c3d4d92dfeb0a305dc87d953677c03c\logback-core-1.2.3.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\1.7.30\b5a4b6d16ab13e34a88fae84c35cd5d68cac922c\slf4j-api-1.7.30.jar;C:\Users\vicasong\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.13.3\ec1508160b93d274b1add34419b897bae84c6ca9\log4j-api-2.13.3.jar org.example.Example
Jun 21, 2021 5:00:49 PM org.jline.utils.Log logr
WARN: Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)
prompt> ?
Invalid command: ?
java.lang.StackOverflowError
	at org.jline.utils.AttributedCharSequence.columnSplitLength(AttributedCharSequence.java:332)
	at org.jline.utils.AttributedCharSequence.columnSplitLength(AttributedCharSequence.java:324)
	at org.jline.reader.impl.LineReaderImpl.insertSecondaryPrompts(LineReaderImpl.java:4179)
	at org.jline.reader.impl.LineReaderImpl.insertSecondaryPrompts(LineReaderImpl.java:4174)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5009)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
	at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3868)
	at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:5020)
	at org.jline.reader.impl.LineReaderImpl.clearChoices(LineReaderImpl.java:4993)
	at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:4020)
<...etc.>

@vicasong
Copy link
Author

Thanks, the problem was solved after I upgraded the Jline version to 3.18.0.

relevant issue

@remkop
Copy link
Owner

remkop commented Jan 21, 2021

@vicasong Great, glad to hear that!

Enjoy using picocli!

@remkop remkop closed this as completed Jan 21, 2021
@remkop remkop added theme: integration An issue or change related to integration with other frameworks, shells or operating systems theme: shell An issue or change related to interactive (JLine) applications type: dependency 📚 labels Jan 21, 2021
@remkop
Copy link
Owner

remkop commented Jan 21, 2021

PS. don't hesitate to give picocli a star ⭐ on GitHub if you like the project! 😉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
theme: integration An issue or change related to integration with other frameworks, shells or operating systems theme: shell An issue or change related to interactive (JLine) applications type: dependency 📚
Projects
None yet
Development

No branches or pull requests

2 participants