线程 "main" java.lang.IllegalArgumentException 中的异常:in 不能为 null

Exception in thread "main" java.lang.IllegalArgumentException: in must not be null

我尝试使用 OpenNLP 库来使用它的 sentencedetector 我尝试编写以下代码但是我遇到了与此地址相关的异常 en-sent.bin 文件,但我不知道如何解决这个文件。

import java.io.*;
import java.net.URL;

import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
public class SentenceDetect 
{

       private SentenceDetectorME sentenceDetector;

        public void init()
        {
            /** Load and initialize the sentence detection model */

            InputStream modelIn = null;
            SentenceModel model = null;

            try {

                modelIn = SentenceDetect.class.getClassLoader().getResourceAsStream("Tokenizer/models/en-sent.bin");
                model = new SentenceModel(modelIn); //*<- line 36*
                }
            catch (IOException e) 
                {
                  e.printStackTrace();
                }
            finally {
                  if (modelIn != null) {
                        try {
                          modelIn.close();
                        }
                        catch (IOException e) {}
                      }
                }

            sentenceDetector = new SentenceDetectorME(model);

        }

        public String[] getSentences(String longSentence)
        {
            return sentenceDetector.sentDetect(longSentence);
        }

}

主要class:

public static void main(String[] args)
    {

       SentenceDetect d = new SentenceDetect();


       d.init();   ///*<- line 10*

       String[] s = d.getSentences("This is sentence #1. This is Sentence #2");

       System.out.println( s[0] );  // Should be the first sentence

       System.out.println( s[1] );  // Should be the second sentence

    }

下图显示了我的项目的层次结构(抱歉我使用的图片 Ubuntu 但我不知道这里有使用打印屏幕按钮):

整个错误是:

`Exception in thread "main" java.lang.IllegalArgumentException: in must not be null!
at opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:179)
at opennlp.tools.sentdetect.SentenceModel.<init>(SentenceModel.java:95)
at SentenceDetect.init(SentenceDetect.java:36)
at Main.main(Main.java:10)`

我尝试了这些路径,但我得到了同样的错误:

改变

  .getResourceAsStream("Tokenizer/models/en-sent.bin");

 .getResourceAsStream("models/en-sent.bin");

你的路径中有"Tokenizer"是你项目的名字,这是无关紧要的,所以你把那位去掉! :)

由于您使用的是 getClassLoader().getResourceAsStream(),该文件必须位于您的类路径中。右击eclipse中的"models"文件夹"build path" -> "use as source folder"。然后确保您的路径与文件夹结构匹配。如果您保留照片中的内容,那就是 "models/en-sent.bin"。

如果您希望这些 .bin 文件通常驻留在您构建的 .jar 文件之外,您应该使用构造一个 FileInputStream 而不是它可以采用绝对文件系统路径。

您需要将路径更改为

 .getResourceAsStream("en-sent.bin");

由于 getResourceAsStream 读取了一个包,并且这些文件 (.bin) 在您的源文件夹中。