Java Lucene 4.1中引发NullPointerException的简单代码

Java Lucene 4.1中引发NullPointerException的简单代码,java,lucene,Java,Lucene,投掷 Tokenizer tokenizer = new org.apache.lucene.analysis.standard.StandardTokenizer (Version.LUCENE_41,new StringReader("!!!")); tokenizer.incrementToken(); 这段代码在Lucene 36上运行正常,为什么会出现异常也许您在发布时在生产代码中替换了传

投掷

Tokenizer tokenizer 
           = new org.apache.lucene.analysis.standard.StandardTokenizer
                                    (Version.LUCENE_41,new StringReader("!!!"));
tokenizer.incrementToken();

这段代码在Lucene 36上运行正常,为什么会出现异常

也许您在发布时在生产代码中替换了传递给StringReader的文本,但是
“!!!”
似乎会导致我的奇怪行为。因为字符串完全是标点符号,所以我不相信有任何标记可供它使用。老实说,我不确定当使用没有令牌的输入调用时,
.incrementToken()
应该做什么


您是否尝试过使用带有有效令牌的输入?

我遇到了与您完全相同的问题(即从3.6升级到4.1后出现NullPointerException),尽管我使用的是
org.apache.lucene.analysis.TokenStream
。在深入研究Lucene源代码之后,我发现在调用
incrementToken
之前调用
reset
方法可以解决这个问题

您可以在此处查看以前版本的文档:


当然,它不应该创建令牌,但incrementToken()应该只返回false而不是抛出异常,关键是这个测试用例与Lucene 3.6兼容,谢谢这就是解决方案
java.lang.NullPointerException
    at org.apache.lucene.analysis.standard.std34.StandardTokenizerImpl34.zzRefill(StandardTokenizerImpl34.java:812)
    at org.apache.lucene.analysis.standard.std34.StandardTokenizerImpl34.getNextToken(StandardTokenizerImpl34.java:1019)
    at org.apache.lucene.analysis.standard.StandardTokenizer.incrementToken(StandardTokenizer.java:180)