1

我在使用 lanterna 包中的 readInput() 方法时遇到问题。我的代码分数

    Terminal terminal = TerminalFacade.createSwingTerminal();
    terminal.enterPrivateMode();
    Key key = terminal.readInput();
    if(key.getKind()==Key.Kind.Escape){
    terminal.moveCursor(6, 6);
    terminal.putCharacter('X');

不允许我在终端中进行任何输入,因此在检查 key.getKind 时会创建空指针异常。有人知道为什么会这样吗?

4

2 回答 2

2

readInput方法是非阻塞的。这意味着在找到输入之前它不会挂起(就像 ieScanner一样)。因此,您将需要自己的“阻塞方法”来等待输入:

Key key = terminal.readInput();
while(key == null) {
    Thread.sleep(5); //whatever low value
    key = terminal.readInput();
}
// here key will not be null, so no NullPointerException
于 2014-12-26T23:53:00.833 回答
0

我想在这里添加一个更新的答案。从 lanterna 3.1.1 开始,readInput() 方法现在是阻塞的。这意味着它将挂起,直到用户输入。

您应该改用 pollInput(),因为这是新的非阻塞方法。

于 2022-02-16T21:17:17.703 回答