0

我正在使用 java 中的 jline version3 开发一个项目,但在完成时,我需要有“else if”,但它会将 \ 作为转义字符转义空间,我也没有任何转义字符,我尝试过null而不是char[]但是它因空指针异常而崩溃

另外,我检查了https://github.com/jline/jline3/issues/173

错误是:

        at org.jline.reader.impl.DefaultParser$ArgumentList.escape(DefaultParser.java:383)
        at org.jline.reader.impl.LineReaderImpl$MenuSupport.update(LineReaderImpl.java:4403)
        at org.jline.reader.impl.LineReaderImpl$MenuSupport.next(LineReaderImpl.java:4317)
        at org.jline.reader.impl.LineReaderImpl.doMenu(LineReaderImpl.java:4471)
        at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:4614)
        at org.jline.reader.impl.LineReaderImpl.doComplete(LineReaderImpl.java:4149)
        at org.jline.reader.impl.LineReaderImpl.expandOrComplete(LineReaderImpl.java:3875)
        at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:585)
        at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:443)
        at REPLReader.readLine(REPLReader.java:99)
        at Compiler.getInputCode(Compiler.java:24)
        at CompilerMain.lex(CompilerMain.java:75)
        at CompilerMain.compile(CompilerMain.java:15)
        at Main.main(Main.java:59)
4

1 回答 1

0

我假设您正在使用 JLine 内置完成程序StringsCompleterDefaultParser.

如果您有包含空格字符的完成候选,那么要么

  1. defaultParser.escapeChars != null 如果或,空格字符会被转义
  2. 如果 . 将引用完成候选人defaultParser.escapeChars == null

这就是StringsCompleter应该如何工作。请参阅StringsCompleterTest.java方法:escapeCharsNull()escapeChars().

NPE 在提交68a9c1f中得到修复。您应该使用 JLine 3.10 或更高版本。

于 2020-09-07T15:01:03.063 回答