首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JLine2:如何将完成者合并到一个组中?

JLine2:如何将完成者合并到一个组中?
EN

Stack Overflow用户
提问于 2015-02-15 01:19:27
回答 1查看 559关注 0票数 0

我认为这个问题会更加具体和清晰。

这是我的代码,它执行简单的自动补全操作(某种意义上)。

代码语言:javascript
复制
public class JLineExample {
    public static void main(String[] args) throws IOException {
        String line;
        ConsoleReader console = new ConsoleReader();
        console.setPrompt("> ");

        // Quit
        Completer quit = new StringsCompleter("quit");

        // Group #1
        Completer start = new StringsCompleter("start");
        Completer stop = new StringsCompleter("stop");

        // Group #2
        Completer propetry = new StringsCompleter("property");
        Completer hide = new StringsCompleter("hide");

        // Joint groups
        Completer executionGroup = new ArgumentCompleter(start, stop);
        Completer propertyGroup = new ArgumentCompleter(propetry, hide);
        Completer jointGroups = new ArgumentCompleter(executionGroup, propertyGroup);

        // Aggregator
        Completer aggregated = new AggregateCompleter(quit, jointGroups);

        console.addCompleter(aggregated);
        while ((line = console.readLine("> ")) != null) {
            if ("quit".equals(line.trim())) exit(1);
        }
    }
}

问题是将完成者合并到一个组中。我得到了

代码语言:javascript
复制
Exception in thread "main" java.lang.NullPointerException
        at jline.console.completer.ArgumentCompleter$AbstractArgumentDelimiter.delimit(ArgumentCompleter.java:283)
        at jline.console.completer.ArgumentCompleter.complete(ArgumentCompleter.java:116)
        at jline.console.completer.ArgumentCompleter.complete(ArgumentCompleter.java:152)
        at jline.console.completer.AggregateCompleter$Completion.complete(AggregateCompleter.java:121)
        at jline.console.completer.AggregateCompleter.complete(AggregateCompleter.java:80)
        at jline.console.ConsoleReader.complete(ConsoleReader.java:3261)
        at jline.console.ConsoleReader.readLine(ConsoleReader.java:2621)
        at jline.console.ConsoleReader.readLine(ConsoleReader.java:2269)
        at com.test.jline.JLineExample.main(JLineExample.java:52)

当按下TAB键时。

有没有什么办法可以解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2015-12-21 00:25:37

你没有在控制台完成器中设置完成器,这就是为什么你会得到空指针异常。

执行以下任一操作:

代码语言:javascript
复制
Vector<String> wc = new Vector<String>();

wc.add("start");
wc.add("stop");
wc.add("load");
wc.add("clear");

console.addCompleter(
    new StringsCompleter(wc)
); 

或者,您可以从外部文件构造它,并将其加载到StringsCompleter构造函数中,或者像这样将其流传输到其中:

代码语言:javascript
复制
console.addCompleter(
    new StringsCompleter(
        IOUtils.readLines(new GZIPInputStream(ConsoleDemo.class.getResourceAsStream("wordlist.txt.gz")))
    )
);

这只是一个取自https://jeszysblog.wordpress.com/2012/04/14/readline-style-command-line-editing-with-jline/的例子

单词文件是由Apache Commons IO库加载的,但它也可以通过java I/O完成,因为如果完全加载到内存中,令牌的文件不会有那么大的问题,否则您应该将令牌拆分成单独的集合,并在需要时加载每个令牌。

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

https://stackoverflow.com/questions/28518128

复制
相关文章

相似问题

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